2

我有一个字符串项数组,我想在 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)

我还尝试了只使用装饰器,只调用“注册”(有和没有返回值的设置),但没有一个工作。桌子总是空的。

关于 stackoverflow 有很多相关的问题,但每个问题似乎都是针对略有不同的情况量身定制的,而使用包含标签的最接近的问题似乎对这个简单的情况进行了过度设计。

4

1 回答 1

2

如果您使用的是 Django >= 1.4,则有一种创建分配标签的简单方法。这些将它们的返回值存储在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 文档在之前就描述了这种方法assignment_tag

于 2012-11-21T00:35:03.287 回答