Skip to content

Instantly share code, notes, and snippets.

@ecarter
Created April 12, 2010 03:56
Show Gist options
  • Save ecarter/363262 to your computer and use it in GitHub Desktop.
Save ecarter/363262 to your computer and use it in GitHub Desktop.
super easy 'object as var' django templatetag
import re
from django import template
from myapp import MyItems
register = template.Library()
class MyItemsNode(template.Node):
def __init__(self, obj, var_name):
self.obj = template.Variable(obj)
self.var_name = var_name
def render(self, context):
try:
obj = self.obj.resolve(context)
context[self.var_name] = MyItems.objects.filter(object=obj)
return ''
except template.VariableDoesNotExist:
return ''
def do_my_items(parser, token):
try:
tag_name, arg = token.contents.split(None, 1)
except ValueError:
raise template.TemplateSyntaxError, "%r tag requires arguments" % token.contents.split()[0]
m = re.search(r'(.*?) as (\w+)', arg)
if not m:
raise template.TemplateSyntaxError, "%r tag had invalid arguments" % tag_name
obj, var_name = m.groups()
return MyItemsNode(obj, var_name)
register.tag('my_items', do_my_items)
{% my_items object as item_list %}
{% if item_list %}
<ul>
{% for item in item_list %}
<li>{{ item.name }}</li>
{% endfor %}
</ul>
{% else %}
<p>no items found.</p>
{% endif %}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment