I don't know whether it's possible, but I'd like to be able to write something like the following:
{% with var1 var2 var3 as some_list %}
{{ some_list|maximum }}
{% endwith %}
Creating a list on the fly from an arbitrary number of template variables and/or literals seems useful, so I'm hopeful that I've overlooked something simple.
Failing that, though, I'd like to know how to create a template tag which accepts an arbitrary number of arguments. (I've played around with simple_tag
, which works well for tags which accept a fixed number of arguments.)
I don't want to go to the trouble of creating a parser and subclassing django.template.Node
until I've ascertained that there's no simpler solution.
The syntax of the Django template language involves four constructs: {{ }} and {% %} . In this shot, we will look at how to use a for loop in Django templates. The for template in Django is commonly used to loop through lists or dictionaries, making the item being looped over available in a context variable.
Django Template Engine provides filters which are used to transform the values of variables;es and tag arguments. We have already discussed major Django Template Tags. Tags can't modify value of a variable whereas filters can be used for incrementing value of a variable or modifying it to one's own need.
{% %} is basically used when you have an expression and are called tags while {{ }} is used to simply access the variable.
8. What does {{ name }} this mean in Django Templates? {{ name }} will be the output. It will be displayed as name in HTML. The name will be replaced with values of Python variable.
If you want to add a new variable (ie some_list
), you'll need access to the template's context, so simple_tag
won't be enough.
For me, the first approach is to try to do this sort of work in the view, in order to keep the templates as simple as possible.
If that's not appropriate, you'll have to write the tag manually, like this:
@register.tag
def make_list(parser, token):
bits = list(token.split_contents())
if len(bits) >= 4 and bits[-2] == "as":
varname = bits[-1]
items = bits[1:-2]
return MakeListNode(items, varname)
else:
raise template.TemplateSyntaxError("%r expected format is 'item [item ...] as varname'" % bits[0])
class MakeListNode(template.Node):
def __init__(self, items, varname):
self.items = map(template.Variable, items)
self.varname = varname
def render(self, context):
context[self.varname] = [ i.resolve(context) for i in self.items ]
return ""
And use it like this to create a new variable some_list
:
{% make_list var1 var2 var3 as some_list %}
Feel free to give it a better name!
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With