我有自定义模板标记:
@register.simple_tag
def random_num():
numbers = range(1,18)
shuffle(numbers)
return numbers
在模板中:
{% for num in random_num %}
{{ num }}
{% endfor %}
什么都没有。 {% random_num %}
很好地打印整个列表,但我需要迭代所有元素。有什么问题?
答案 0 :(得分:4)
您不能将templatetag用作变量,因此:
{% for num in random_num %}
无法正常工作。
您需要将模板标签更改为assignment tag
@register.assignment_tag
def random_num():
numbers = range(1,18)
shuffle(numbers)
return numbers
...并使用模板中的as
子句:
{% random_num as numlist %}
{% for num in numlist %}
{{ num }}
{% endfor %}
答案 1 :(得分:1)
根据Anentropic的回答,在Django 2.0中你可以继续使用simple_tag
,但你仍然必须使用as
子句。 assignment_tag
也是,has been deprecated and removed from Django 2.0。
因此,您的代码可以是:
@register.simple_tag
def random_num():
numbers = range(1,18)
shuffle(numbers)
return numbers
在模板中,您应该将其用作:
{% random_num as numlist %}
{% for num in numlist %}
{{ num }}
{% endfor %}