在Django模板中检查子字符串匹配

时间:2018-10-16 04:49:51

标签: django django-templates

在我的模板中,我有:

{% if form.non_field_errors %}
<div class="alert alert-info" role="alert">
  {% if "already exists" in form.non_field_errors %}
    You've already submitted your request once. Please wait for confirmation, or email us at support@relsoft.in
  {% else %}
    {{ form.non_field_errors }}
  {% endif %}
</div>
{% endif %}

似乎{% if "already exists" in form.non_field_errors %}块不起作用。我在输出中得到以下内容:

<div class="alert alert-info" role="alert">      
  <ul class="errorlist nonfield"><li>Pendingclinics with this Name, Mobile and Email already exists.</li></ul>   
</div>

2 个答案:

答案 0 :(得分:3)

在回答这个问题之前,请注意上面@DanielRoseman的评论:这确实是错误的方法。您应该在表单上定义一个自定义的clean()方法,并在那里引发特定的错误。

因此,尽管下面的代码回答了您的问题,但这不是最佳实践!

form.non_field_errors是一个列表。当你说

if s in form.non_field_errors

这意味着您正在检查form.non_field_errors是否包含与s完全相等的元素。在您的代码中情况并非如此。您的form.non_field_errors包含一个元素(字符串),该元素本身包含子字符串“已经存在”。

您想遍历错误并检查其中一个是否包含此子字符串。对于您要在视图中而不是模板中执行的逻辑来说,这似乎就像我。例如,在视图中:

was_submitted_before = any(["already exists" in s for s in form.non_field_errors])

然后可以将was_submitted_before变量传递给模板,然后在模板中测试是否为真。

答案 1 :(得分:1)

form.non_field_errors是一个字符串列表,而不是单个字符串。

因此,您要询问'already exists'中是否有['Pendingclinics with this Name, Mobile and Email already exists.'],即false

恐怕您必须做一些复杂的事情才能检查是否存在特定错误。