我想在HTML表格中显示一系列字符串项,模板中最简单的方法就是“消息”表单。我称之为“活动”:
{% if activities %}
<table class="activities">
<tr>
{% for activity in activities %}
<td>{{ activity }}</td>
{% endfor %}
</tr>
</table>
{% endif %}
我认为活动可以是一个返回数组的简单标记,但我从其他stackoverflow答案(下面链接)中看到,这是为了将返回的字符串放入模板中,而不是返回值。
我不需要这个数组的上下文或任何参数,但它可能在不同的页面上以不同的格式出现,所以我不希望标签返回表格的“innerHTML”。
我该怎么做?我在一个额外的文件中尝试了以下内容(并验证它是被调用的,我故意将语法错误放入其中,当我进入此页面时它确实已经触发了,所以我删除了它们):
from django import template
register = template.Library()
@register.simple_tag
def activities():
return ("A", "B")
activities = register.simple_tag(activities)
我也尝试过装饰器,只需调用'register'(无论是否设置返回值),都没有效果。桌子总是空的。
有关stackoverflow的很多相关问题,但每个问题似乎都是根据略有不同的情况量身定制的,使用inclus_tag的closest似乎对这个简单的案例进行了过度设计。
答案 0 :(得分:2)
如果您使用的是Django&gt; = 1.4,则有一种简单的方法可以创建assignment tags。它们将返回值存储在as
关键字后指定的模板变量中。在你的情况下,那将是:
{% get_activities as activities %}
{% if activities %}
<table class="activities">
<tr>
{% for activity in activities %}
<td>{{ activity }}</td>
{% endfor %}
</tr>
</table>
{% endif %}
此标记背后的代码非常简单。真正重要的是assignment_tag
装饰者。
from django import template
register = template.Library()
@register.assignment_tag
def get_activities():
return ("A", "B")
对于早于1.4的Django版本,这仍然可行,但需要更多的样板代码来创建编译功能和节点类。实际上Django文档describes this approach就在assignment_tag
之前。