【问题标题】:Django: Setting one page as the main pageDjango:将一页设置为主页面
【发布时间】:2010-02-09 14:13:16
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: python django


    【解决方案1】:

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

    编辑:

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

    【讨论】:

    • 将“魔法值”存储在设置文件中非常不灵活,但有更好的解决方案。
    【解决方案2】:

    执行此操作的最简单方法是按照您的建议创建布尔值,并使用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,但这取决于您。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-03-13
      • 2012-09-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多