我是Django的新手,我想做一些我不确定该怎么做的事。
我有一个模型SimplePage,它只代表一个在网站上可见的网页,其内容可以在管理员中编辑。 (我认为这与FlatPage类似。)
所以我的网站上有一堆SimplePages,我希望其中一个是主页面。 (a.k.a.索引页面。)我知道如何在网址/
上提供它。但我也希望它收到略有不同的处理。 (它包含与其他页面不同的页面元素。)
将页面标记为主页面的好方法是什么?我考虑在SimplePage模型中添加一个布尔字段is_main_page
,但是我怎么能确保只有一个页面可以标记为主页面?
答案 0 :(得分:1)
使用主键在settings.py中创建MAIN_PAGE设置。然后使用设置创建视图main_page nad从数据库中检索main_page对象。
修改强>
你也可以这样做:添加一个模型,它将引用一个SimplePage并指向主页面。在主页面视图中,您将检索所需的SimplePage,django admin中的任何人都可以轻松更改它。
答案 1 :(得分:0)
最简单的方法是创建布尔值,如您所建议的那样,并使用pre_save
信号从数据库中的其他所有内容中删除布尔值。
from django.db.models import signals
def simple_page_pre_save(sender, instance, **kwargs):
if instance.is_main_page == True:
SimplePage.objects.update(is_main_page=False)
signals.pre_save.connect(simple_page_pre_save, sender=SimplePage)
这样,只要您保存SimplePage
,就会看到is_main_page
是否为真,以及是否为is_main_page
的每个其他页面设置了False
。还有一些工作要做,以确保总有一个is_main_page
,但这更取决于你。