【发布时间】:2018-07-31 11:42:18
【问题描述】:
我正在尝试重构手动呈现字段的 Django 模板(参见https://docs.djangoproject.com/en/2.0/topics/forms/#rendering-fields-manually)。标签生成如下:
<label for="{{ field.id_for_label }}"
class="{% if field.value %}active{% endif %} {% if field.errors %}invalid{% endif %}">
</label>
field 使用 {% for field in form %} ... {% endfor %} 循环。
我正在尝试通过编写自定义过滤器来重构它(参见https://docs.djangoproject.com/en/2.0/howto/custom-template-tags/#writing-custom-template-filters)。到目前为止,我已经想出了以下内容。在templatetags 目录中,我添加了一个label_with_classes.py,其内容为
from django import template
register = template.Library()
@register.filter(is_safe=True)
def label_with_classes(value, arg):
return value.label_tag(attrs={'class': arg})
我用它来替换上面的 HTML
{{ field|label_with_classes:"active"}}
问题是这实际上并没有做原始模板所做的事情;它总是用 "active" 类标记它,并且不实现条件逻辑。
我的问题:是否可以使用过滤器来实现此逻辑?过滤函数的value 输入参数实际上代表什么,是field.value(顾名思义)还是field 本身?
【问题讨论】:
标签: python html django django-templates django-template-filters