Django 标签在 block 标签中返回数组

标签 django django-templates

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

相关文章:

Django AWS S3 使用 Boto 和 Compressor 无法压缩 UncompressableFileError

javascript - 用 Django 制作两人国际象棋应用程序——当对手移动时需要玩家的棋盘更新

django - 翻译 django 模板中的动态内容

python - 此模板中正确的包含路径是什么?

django - 有没有办法在管理搜索中搜索多个术语? Django

python - 如何在 nginx 中安装 Wordpress 和 Django 应用程序

django - 可重用 Django 应用程序中的基本模板

Django 模板变量值与字符串文字比较失败

python - 图像未出现在 django 2.1 的模板中

django - 每个用户自动递增 django 模型字段