2017-02-03 82 views
0

//编辑无效块标记

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

如何使用jinja声明新变量?

在下面的代码块的结果的第二行到一个错误:

{% set msg_class = "" %} 

错误消息:

上线13无效的块标记:“设置”,预期“的elif”,“其他”或'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?

+0

你确定你使用的神社?这是标准Django模板语言的错误。 –

+0

我想如果我在html模板中使用代码,它被称为jinja?我错了吗? https://en.wikipedia.org/wiki/Jinja_(template_engine) – user2871190

+1

是的,你错了。 Jinja是一个独立的模板系统,Django支持,但不是默认模板系统。您正在使用标准模板语言,该语言在Django网站上有详细记录,并且不支持'set'标签。 –

回答

1

为什么不能简化它这个样子?

{% 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] %} 
+0

谢谢,这种方式更好!这不是我的问题解决方案。 – user2871190

+0

@jrbedar在Django引擎中没有标签'集合'悲伤。每个人都认为他们实际上是jinja2。这就是为什么我一直在寻找解决这个问题的答案 – holms