PageRenderTime 45ms CodeModel.GetById 18ms RepoModel.GetById 0ms app.codeStats 0ms

/nourish/templatetags/nourish.py

https://code.google.com/p/nourish/
Python | 64 lines | 53 code | 11 blank | 0 comment | 13 complexity | 9bfb03b4872f862561c14700623ef5a7 MD5 | raw file
  1. from django import template
  2. from django.db import models
  3. import sys
  4. import re
  5. register = template.Library()
  6. from django.templatetags.future import url
  7. @register.inclusion_tag('nourish/user_link.html')
  8. def userlink(user):
  9. profile = user.get_profile()
  10. url = profile.url
  11. name = profile.fullname
  12. if not url:
  13. url = '/users/' + str(user.id)
  14. if not name:
  15. name = user.username
  16. return { 'name' : name, 'url' : url }
  17. class Link(template.Node):
  18. def __init__(self, urlnode):
  19. self.urlnode = urlnode
  20. def render(self, context):
  21. u = self.urlnode.render(context)
  22. if 'canvas' in context and context['canvas']:
  23. p = re.compile("\/nourish\/")
  24. return p.sub('/nourish/fb/', u)
  25. else:
  26. return u
  27. class ObjectLink(template.Node):
  28. def __init__(self, var):
  29. self.var = var
  30. def render(self, context):
  31. v = self.var.resolve(context)
  32. if isinstance(v, str):
  33. u = '[unknown]'
  34. else:
  35. u = v.get_absolute_url()
  36. if 'canvas' in context and context['canvas']:
  37. p = re.compile("\/nourish\/")
  38. return p.sub('/nourish/fb/', u)
  39. else:
  40. return u
  41. @register.tag(name='nurl')
  42. def clink_tag(parser, token):
  43. bits = token.split_contents()
  44. if len(bits) < 2:
  45. raise TemplateSyntaxError("'%s' takes at least one argument"
  46. " (path to a view)" % bits[0])
  47. tp = parser.compile_filter(bits[1])
  48. p = re.compile("^'")
  49. if p.match(bits[1]):
  50. u = url(parser, token)
  51. return Link(u)
  52. else:
  53. return ObjectLink(tp)