将'with'模板标记与'if'模板标记结合使用

时间:2018-05-20 09:21:13

标签: django django-templates

在Django模板中,我们可以使用with

{% with total=business.employees.count %}
    {{ total }} employee{{ total|pluralize }}
{% endwith %}

我们可以将withif

结合使用吗?

我试过了:

{% with a={%if product.url %}product.url{%else%}default{%endif %} %}

但是我收到了错误:

Could not parse the remainder: '{%if' from '{%if'

2 个答案:

答案 0 :(得分:1)

至少Django模板语言非常愚蠢 - 逻辑不应该在模板中发生 - 所以想想模板标签=>注册你自己的并尝试在视图中移动逻辑......

在这种情况下,问题可能是您尝试这样做的原因?

可能在您需要的地方直接使用变量可能更容易,如果它是None,则使用默认模板标记/函数:

{{ product.url|default_if_none:default }}

但无论如何,您的解决方案可能如下所示:

{% with a=default %}
  {% if product.url %}
    {% update_variable product.url as a %}
  {% endif %}
{% endwith %}

您的模板标记应如下所示:

@register.simple_tag
def update_variable(value):
    return value

答案 1 :(得分:1)

可能有用的标记过滤器:

from django import template

register = template.Library()

@register.simple_tag
def fallback(value, default_value):
     if not value:
         return default_value
     return value

在模板中,您需要加载文件

{% load app_containing_tag_filters %}

{% with a = product.url|fallback:default %}
     stuffs here
{% endwith %}