Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django:将一页设置为主页面_Python_Django - Fatal编程技术网

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

Python Django:将一页设置为主页面,python,django,Python,Django,我是Django的新手,我想做一些我不知道怎么做的事情 我有一个模型SimplePage,它只是代表一个在网站上可见的网页,其内容可以在管理员中编辑。(我认为这与FlatPage类似。) 所以我的网站有很多SimplePages,我希望其中一个成为主页。(又称索引页。)我知道如何在url/上提供它。但我也希望它接受稍微不同的处理。(它包含与其他页面不同的页面元素。) 将页面标记为主页的好方法是什么?我曾考虑在SimplePage模型中添加一个布尔字段is_main_page,但如何确保只有一个页

我是Django的新手,我想做一些我不知道怎么做的事情

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

所以我的网站有很多SimplePages,我希望其中一个成为主页。(又称索引页。)我知道如何在url
/
上提供它。但我也希望它接受稍微不同的处理。(它包含与其他页面不同的页面元素。)


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

使用主键在settings.py内创建主页设置。然后创建视图主页并使用设置从数据库检索主页对象

编辑:


您也可以这样做:添加一个模型,它将引用SimplePage并指向主页面。在主页视图中,您将检索所需的SimplePage,django admin中的任何人都可以轻松更改它。

最简单的方法是按照您的建议创建布尔值,并使用
pre\u 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
时,它就会看到
是否为主页
为真,以及是否每隔一页将
是否为主页
设置为
为假
。仍有一些工作要做,以确保始终有一个
是\u主页
,但这更取决于您。

在设置文件中存储“魔法值”是非常不灵活的,并且有更好的解决方案。