如何在Jinja标签中使用jinja标签

时间:2019-07-01 12:56:22

标签: python django jinja2

这是我的代码:

{% if {{post.author.profile.image.url}} is None %}

运行此代码时出现错误

Could not parse the remainder: '{{post.author.profile.image.url}}' from '{{post.author.profile.image.url}}'

该如何解决?以及如何在模板标签内使用模板标签

3 个答案:

答案 0 :(得分:5)

直接使用expression的值,您不应该将其包装在大括号内:

{% if post.author.profile.image.url is None %}
   ...
{% endif %}

答案 1 :(得分:0)

abdusco已经回答了您问题的第一部分(“如何解决此问题”)。

wrt /第二部分:

  

如何在模板标签内使用模板标签

简单的答案是:你不能,经期。一旦了解了模板系统的工作原理,为什么不可能实现就变得很明显了,无论如何这几乎都是无用的(如果您发现自己试图在标签中使用标签,那么您做错了,实际上有更好的方法)。

注意:当我说你不能嵌套标签时,我的意思是你不能这样做:

{% sometag arg={% some_other_tag %} %}

现在在您的示例中,您要尝试的不是“在标签内使用标签”,而是在标签内使用 context变量,这当然是 可能(否则模板语言将很难使用),如abdusco的答案所示。而且,至少在模板标记正确实现的情况下,您也可以在此处使用过滤器表达式(将过滤器应用于上下文变量),即{% mytag some.variable|upper %}

答案 2 :(得分:0)

第一个问题已经回答。关于这一点:

  

以及如何在模板标签内使用模板标签

简短的回答:您不能。长答案:您可以借助“块分配”标签(http://jinja.pocoo.org/docs/2.10/templates/#block-assignments):

{% set somevar %}
... any number of tags here {{ post.author.profile.image.url }} ...
{% endset %}
...
{% if somevar is None %} ... {% endif %}

您也可以(自Jinja2 2.10起)将过滤器应用于分配:

{% set somevar | default('Empty') %}
... any number of tags here {{ post.author.profile.image.url }} ...
{% endset %}