在Python中,有两种使用if
和else
的方法:或者用于布尔流控制,在这种情况下,它与冒号和缩进一起使用,或者像https://www.pythoncentral.io/one-line-if-statement-in-python-ternary-conditional-operator/中描述的那样作为单行上的表达式。
据我所知,Django模板语言的{% if %}
. {% else %}
. {% endif %}
标记等同于前者。但是,我想知道是否可以以某种方式实现后者来重构下面的代码:
<form action="" method="post">{% csrf_token %}
{% for field in form %}
{% if field.name == "checkin_type" %}
<div class="auto-submit">
{{ field.errors }}
{{ field.label_tag }}
{{ field }}
</div>
{% else %}
<div>
{{ field.errors }}
{{ field.label_tag }}
{{ field }}
</div>
{% endif %}
{% endfor %}
<input type="submit" value="Send message" />
</form>
在这里,我遍历表单的字段,并将一个特定的类"auto-submit"
添加到特定字段("checkin_type"
)的封闭<div>
元素中。我想按照以下‘伪代码’的思路重构这个代码:
<form action="" method="post">{% csrf_token %}
{% for field in form %}
<div class="{% if field.name=='checkin_type'%}auto-submit{% else %}{% endif %}">
{{ field.errors }}
{{ field.label_tag }}
{{ field }}
</div>
{% endfor %}
<input type="submit" value="Send message" />
</form>
换句话说,我想通过使用if
.else
语句来减少代码的重复,只在class
的定义中使用一种三元操作符。这在DTL中有可能吗?
顺便说一句,如果我尝试用上面的代码加载模板,就会得到一个TemplateSyntaxError
无法解析余数:‘=’checkin_type‘’“来自‘Could d.name=’checkin_type‘”
也许我只需要做正确的引语转义?
发布于 2018-02-28 18:07:26
它应该是==
前后的空格,不需要空的{% else %}
块:
<div class="{% if field.name == 'checkin_type'%}auto-submit{% endif %}">
发布于 2020-09-13 17:10:12
Django有内置标记筛选器yesno
。
您可以这样使用它:
<div class="{{ field.name|yesno:"checkin_type,''" }}">
https://docs.djangoproject.com/en/4.0/ref/templates/builtins/#yesno
https://stackoverflow.com/questions/49041089
复制相似问题