2013-12-14 65 views
3

有一个奇怪的问题。比方说,在我的内容模型:Django模板:如何基于模型中的布尔字段显示HTML块

show_in_posts = models.BooleanField() 
show_in_news = models.BooleanField() 
show_in_updates = models.BooleanField() 

然后在我的{% for content in contents %}模板:

{% if content.show_in_news == 'True' %} 
    .... 
{% endif %} 

似乎无法获得的条件工作。看起来{{ content.show_in_news }}总是评估为True,即使它在管理面板中设置为未选中状态。我试过没有引号{% if content.show_in_news == True %}也试过全部小写真,或者只是{% if content.show_in_news %}不行。

其他一些帖子建议注册一个自定义的“过滤器”,但这似乎很微不足道,应该开箱即用?

非常感谢的帮助!

+0

什么'{{content.show_in_news}}'给你? –

+0

每个以上,即使复选框未在管理员中被选中,似乎总是“真”。 – pete

+0

有些事情肯定是错误的。即使我的其他布尔值都在模板中打印为“真”,但它们在数据库中肯定设置为关闭。我可以在管理员中切换它们并保存 - 它们变成红色的“停止标志”图标,切回并保存,返回到“绿色选中标记” - 一切正常。我只是不能让他们通过模板来通过除True以外的其他任何模板。其他类型,例如CharField,TextArea显示正常..呃,什么给出:( – pete

回答

0

您可以使用匹配BooleanField条件:

{% ifequal content.show_in_news True %} 
    Your code here 
{% endifequal %} 

或者这样

{% if content.show_in_news %} 
    your code here 
{% endif %} 
0

我只是碰到了这一点。发生了什么是Django的{%if expr%}如果expr存在并且不是None,则评估为true。由于表单字段本身存在,条件总是评估为真。烦人。

你可以把它的工作就像你期望通过价值明确,像这样:

{% if content.show_in_news.value %} 
相关问题