2010-02-09 102 views
0

我是Django的新手,我想做一些我不知道該怎麼做的事情。Django:設置一個頁面作爲主頁面

我有一個模型SimplePage,它簡單地代表了網站上可見的網頁,其內容可以在管理員中進行編輯。 (我認爲這與FlatPage相似。)

所以我有一堆SimplePages用於我的網站,我希望其中一個是主頁面。 (又名索引頁)。我知道如何使它在url /上可用。但我也希望它接受稍微不同的處理。 (它包含與其他頁面不同的頁面元素。)

將頁面標記爲主頁面的好方法是什麼?我考慮在SimplePage模型中添加一個布爾字段is_main_page,但我怎麼能保證只有一個頁面可以被標記爲主頁面?

回答

1

使用主鍵在settings.py中創建MAIN_PAGE設置。然後創建視圖main_page nad使用該設置從數據庫中檢索main_page對象。

編輯:

你也可以做這樣的:添加一個模型,將引用SimplePage並指向主頁。在主頁面視圖中,您將檢索想要的SimplePage,並且django admin中的任何人都可以輕鬆更改它。

+0

使設置文件中存儲的「魔術值」非常不靈活,並且有更好的解決方案。 – 2010-02-09 15:32:46

+0

是的,這不是最好的方法。我已添加編輯。 – gruszczy 2010-02-09 15:34:19

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,但這取決於你。