【问题标题】:Invalid block tag无效的块标签
【发布时间】:2017-06-20 06:50:43
【问题描述】:

//编辑

我使用的是标准模板语言,而不是 jinja。标准模板语言不支持set 标记。

如何使用 jinja 声明一个新变量?

以下代码块中的第二行导致错误:

{% set msg_class = "" %}

错误信息:

第 13 行的块标记无效:'set'、预期的 'elif'、'else' 或 'endif'。您是否忘记注册或加载此标签?

其余代码:

{% if msg %}
  {% set msg_class = "" %}
  {% if status == 1 %}
    {% set msg_class = "alert alert-success" %}
  {% elif status == 3 %}
    {% set msg_class = "alert alert-danger" %}
  {% elif status == 4 %}
    {% set msg_class = "alert alert-warning" %}
  {% else %}
    {% set status = 2 %}
    {% set msg_class = "alert alert-info" %}
  {% endif %}
{% endif %}

使用我发现的以下线程中的数组对我来说真的很难看。它是唯一的解决方案吗?

Can a Jinja variable's scope extend beyond in an inner block?

【问题讨论】:

  • 您确定您使用的是 Jinja 吗?这是标准 Django 模板语言的错误。
  • 我想如果我在html模板中使用代码,它就叫做jinja?我错了吗? en.wikipedia.org/wiki/Jinja_(template_engine)
  • 是的,你错了。 Jinja 是一个独立的模板系统,Django 支持但不是默认的。您正在使用标准模板语言,该语言在 Django 站点上有详细记录,并且不支持 set 标记。
  • 谢谢,现在我知道如何继续搜索了!

标签: python django jinja2


【解决方案1】:

Django 模板语言中的变量可以这样使用:

{% with name="World" greeting="Hello" %}     
{{ greeting }} {{name}}
{% endwith %}

https://docs.djangoproject.com/en/dev/ref/templates/builtins/#with

【讨论】:

  • 我已经花了三十分钟,尝试使用 jinja2 的“设置”块。我没有意识到 Django 的模板与 vanilla jinja2 有点不同。谢谢!
【解决方案2】:

为什么不这样简化呢?

{% set classes = ['success', 'info', 'danger', 'warning'] %}
{% if status not in [1,3,4] %}
    {% set status = 2 %}
{% endif %}
{% set msg_class = "alert alert-"+classes[status-1] %}

【讨论】:

  • 谢谢,这样更好!这不是我的问题的解决方案。
  • @jrbedar 在 django 引擎中没有标签 set 很遗憾。每个人都认为他们实际上是 jinja2。这就是我一直在寻找这个问题的答案的原因
猜你喜欢
  • 2013-10-08
  • 1970-01-01
  • 2011-07-18
  • 2016-01-26
  • 2015-02-10
  • 1970-01-01
  • 2013-09-01
  • 2014-08-18
  • 2016-04-12
相关资源
最近更新 更多