Django:将一个页面设置为主页面

时间:2010-02-09 14:13:17

标签: python django

我是Django的新手,我想做一些我不确定该怎么做的事。

我有一个模型SimplePage,它只代表一个在网站上可见的网页,其内容可以在管理员中编辑。 (我认为这与FlatPage类似。)

所以我的网站上有一堆SimplePages,我希望其中一个是主页面。 (a.k.a.索引页面。)我知道如何在网址/上提供它。但我也希望它收到略有不同的处理。 (它包含与其他页面不同的页面元素。)

将页面标记为主页面的好方法是什么?我考虑在SimplePage模型中添加一个布尔字段is_main_page,但是我怎么能确保只有一个页面可以标记为主页面?

2 个答案:

答案 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,但这更取决于你。