如何通过Django模板控制帖子显示并判断用户选择的公开状态?
解决方法:修正模板中的字段判断逻辑
嘿,我发现你代码里的问题啦!你的模板判断用错了字段名,这就是为什么没法正确识别用户选择的选项。
问题根源
你在models.py里定义的存储公开状态的字段是post_public,但在index.html模板里却用了post_object.choices来判断——choices只是这个字段的选项配置参数,不是实际存储值的字段名,所以这个判断根本取不到正确的值!
修正步骤
把模板里的判断条件改成直接检查post_public字段的值就行:
修正后的index.html代码
<!DOCTYPE html> <html lang="en" dir="ltr"> <head> <meta charset="utf-8"> <title></title> </head> <body> {% for post_object in object_list %} {% if post_object.post_public == "Public" %} <h1>{{ post_object.post_title }}</h1> <p>{{ post_object.post_description }}</p> {% endif %} {% endfor %} </body> </html>
额外小技巧(可选)
Django给带choices的字段自动生成了get_xxx_display()方法,用来获取选项的显示文本。比如你可以用{{ post_object.get_post_public_display }}拿到用户看到的选项名称(这里你的键和值一样,所以效果和直接取post_public一样,但如果以后把选项改成('pub', 'Public')这种键值不同的形式,用这个方法会更稳妥)。对应的判断可以写成:
{% if post_object.get_post_public_display == "Public" %}
这样就能准确判断用户选择的是Public还是Not public,从而控制帖子的展示啦!
内容的提问来源于stack exchange,提问作者Luis Leuppi
相关产品推荐
相关产品推荐

