对于一个空白的十进制字段,有没有办法强制django显示任何内容而不是“None”?
在我的模板中,我显示了特定字段的所有值的列表。每个值都超链接到一个页面,该页面显示在该值上过滤的查询结果。但是因为有一些空值的条目,我的列表包括实际的DecimalField条目和所有空的条目的“无”。当用户单击None时,django会抛出验证错误,因为您无法使用字符串查询DecimalField。
我可以编写if语句检查Nones的所有十进制字段实例并跳过它们,但这远非优雅的解决方案。有什么建议吗?
这是代码的一部分,尽管还有其他模板以稍微不同的方式派生None值:
{% for item in choices %}
<a href={% url app_views.field_choice item %}>{{ item }}</a><br>
{% endfor %}
答案 0 :(得分:15)
如果您不想过滤值列表,可以使用内置的default
或default_if_none
模板过滤器来控制显示的内容,但是通过上面给出的示例,您可以d最终得到空链接。
{{ item|default_if_none:"" }}
鉴于您需要对每个值进行超链接和查询,以及如果没有给出数字将显示错误的视图,我会在您将列表传递给模板上下文时对其进行过滤:
{"choices": [choice in choices where choice is not None]}
答案 1 :(得分:0)
好的,所以我们假设你让Django返回一个空字符串,而不是空值。
现在这段代码会发生什么:
{% for item in choices %}
<a href={% url app_views.field_choice item %}>{{ item }}</a><br>
{% endfor %}
你要么:
<a href="/field_choice/"></a>
)你不想使用的方法很多(!)更优雅:
{% for item in choices %}
{% if item %}
<a href={% url app_views.field_choice item %}>{{ item }}</a><br>
{% endif %}
{% endfor %}
当然,您也可以事先建立一个没有空项目的列表:在视图中,甚至使用a custom manager。