【发布时间】:2026-01-06 04:35:01
【问题描述】:
是否可以确定 Django 模板中的模板变量是否满足正则表达式?在下面的模板中,我想根据该字段的帮助文本是否满足正则表达式来为包含帮助文本的段落标签设置 CSS 类。这是带有一些伪代码的模板:
{% for field in form.visible_fields %}
<div class="form-group">
{{ field.errors }}
{{ field.label_tag }} {{ field }}
{% if field.help_text %}
{% if field.help_text|lower (BEGINS WITH SOME STRING) %} # Pseudocode
<p class="select-help-text">{{ field.help_text|safe }}</p>
{% else %}
<p class="help-text">{{ field.help_text|safe }}</p>
{% endif %}
{% endif %}
</div>
{% endfor %}
例如,如果关联表单中定义的 help_text 以文本字符串“按住 Ctrl”开头,则 CSS 类应设置为 select-help-text,否则应设置为 help-text。
我了解 Django 正则表达式基于 Python 正则表达式,但 Python 正则表达式评估似乎总是使用在 Django 模板中无法访问的 re 模块完成。我还查看了 Django 文档,但找不到这样做的方法。
更新
我仍然无法让这段代码工作。
下面回答的梅尔文在技术上是正确的。您应该避免将条件逻辑放在 Django 模板中。为此,我根据 Django documentation 更改了我的模板:
{% for field in form.visible_fields %}
<div class="form-group">
{{ field.errors }}
{{ field.label_tag }} {{ field }}
{% if field.help_text %}
<p class="help-text">{{ field.help_text|safe }}</p>
{% endif %}
</div>
{% endfor %}
然后,我在我的表单 ModelForm 类中添加了一个 __init__ 方法,该方法查看不应显示其帮助文本的表单字段的标签,并将 help_text 设置为“falsey”值,因此模板将失败:
def __init__(self, *args, **kwargs):
super(MyModelForm, self).__init__(*args, **kwargs)
for visible in self.visible_fields():
if visible.field.label == 'foo' or visible.field.label == 'bar' or visible.field.label == 'baz':
visible.field.help_text = False
但是,无论我将 help_text 设置为 False 还是 None 还是空字符串,我仍然可以看到帮助文本。这是某种时间问题还是我犯了一个我没有看到的错误?
【问题讨论】:
-
这是由 ModelForm 如何覆盖事物引起的。基本上,您应该改写 Meta.help_texts。我还没有找到模型形式在哪里可以做到这一点,但是使用正常形式,您的代码可以按预期工作。然而,覆盖 help_texts 对于您的情况是非常不切实际的。
-
好吧,你可能和我有同样的问题:模型表单
title()他们的标签,所以你的匹配可能不匹配。