我有一个字符串项目数组,我想在 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)
我也尝试过仅使用装饰器,并仅调用“注册”(无论是否设置返回值),但都不起作用。 table 总是空的。
stackoverflow 上有很多相关问题,但每个问题似乎都是针对略有不同的情况量身定制的,并且 closest ,使用clusion_tag,对于这个简单的情况来说似乎是过度设计的。
最佳答案
如果您使用的是 Django >= 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
之前。
关于Django 标签在 block 标签中返回数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13484196/