Sometimes you want to create a temporal variable to store something or do anything you want with it, problem is that django template system doesn't provide this kind of feature. This template tag is just for that.
Syntax::
{% assign [name] [value] %}
This will create a context variable named [name] with a value of [value] [name] can be any identifier and [value] can be anything. If [value] is a callable, it will be called first and the returning result will be assigned to [name]. [value] can even be filtered.
Example::
{% assign count 0 %} {% assign str "an string" %} {% assign number 10 %} {% assign list entry.get_related %} {% assign other_str "another"|capfirst %}
{% ifequal count 0 %} ... {% endifequal %}
{% ifequal str "an string" %} ... {% endifequal %}
{% if list %} {% for item in list %} ... {% endfor %} {% endif %}
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | from django import template
class AssignNode(template.Node):
def __init__(self, name, value):
self.name = name
self.value = value
def render(self, context):
context[self.name] = self.value.resolve(context, True)
return ''
def do_assign(parser, token):
"""
Assign an expression to a variable in the current context.
Syntax::
{% assign [name] [value] %}
Example::
{% assign list entry.get_related %}
"""
bits = token.contents.split()
if len(bits) != 3:
raise template.TemplateSyntaxError("'%s' tag takes two arguments" % bits[0])
value = parser.compile_filter(bits[2])
return AssignNode(bits[1], value)
register = template.Library()
register.tag('assign', do_assign)
|
More like this
- Template tag - list punctuation for a list of items by shapiromatron 10 months, 2 weeks ago
- JSONRequestMiddleware adds a .json() method to your HttpRequests by cdcarter 10 months, 3 weeks ago
- Serializer factory with Django Rest Framework by julio 1 year, 5 months ago
- Image compression before saving the new model / work with JPG, PNG by Schleidens 1 year, 6 months ago
- Help text hyperlinks by sa2812 1 year, 6 months ago
Comments
A bug, forgot a template.Variable in there ?
#
This is really useful, but it breaks if you use string with spaces as as the value -
{% assign str "an string" %}
produces:'assign' tag takes two arguments
Exchanging
token.contents.split()
totoken.split_contents()
solves the problem#
I got a question if I assign a variable inside for loop block, I have no access to it outside for loop block. Do you know how I can access this value?
#
+1 Thanks!
#
Please login first before commenting.