2011-12-07 26 views
2

我有一個django站點。與所有標準網站一樣,它使用URLConfs將URL與視圖相關聯。不過,除此之外,我還有一些URL配置可以從數據庫中的數據動態生成。一切正常,因爲我喜歡它。動態地爲正在運行的站點重新加載URLConfs

是否有可能重新加載站點運行時,從代碼的所有URLConfs?如果有人更新數據庫並更改網站中的某些網址,我想觸發所有網址的「重新發現」。這會導致我的代碼從數據庫中的數據動態地重新創建URL。

目前,生成的URL可以位於URL層次結構中的任何位置。它們不是全部在一個前綴之下,例如/ dynamic/等。但是,如果這是完成我需要完成的工作所必需的,我可以將所有動態URL放在一個前綴下。

在重新發現URL時,網站允許一些停機時間。

我將如何觸發所有URLConfs的重新加載?

+0

我不得不在德州論壇報上做同樣的事情。我們使用重定向框架來支持我們的舊URL方案,同時實現一個新的URL方案,並且它像一個魅力一樣工作。它可能並不完全適合你的需求,但可能會給你一些想法。 – Brandon

+0

沒有必要維護舊的網址並將其重定向到新網址。我想我的問題更簡單。當有人添加一個對應於新URL的新數據庫條目時,如何重新加載URLConfs。目前,我有一個url.py文件,它從DB創建urlpatterns。我將如何觸發從代碼重新加載所有urlpatterns? –

+0

如何讓你的urlpatterns成爲一個getter的屬性,每次Django訪問它時都會調用它? –

回答

5

您的問題從大多數Django程序員都不會接受的前提開始:您可以或應該從數據庫動態創建URL。如果你這樣做,你做錯了。

您的網址格式是代碼的一部分,而不是數據。顯然,這些URL本身是通過將模式與數據結合在一起形成的,例如foo/<slug>/bar/,但是當添加新的sluket時不需要重新加載,因爲它是由視圖解決的,而不是URL處理器。

+0

我同意丹尼爾。即使在論壇報上,我們也不會動態地產生模式;他們在urls.py中定義。 +1爲你丹尼爾。 – Brandon

+1

我明白我沒有遵循Django設定的範例。但是,真實世界的要求是這樣的:1.商業用戶可以動態編輯和(很少)添加新頁面。 2.頁面的網址路徑可以位於網站層次結構中的任何位置3.網址必須符合搜索引擎優化的要求,並遵循最少突擊的法則(更喜歡/ aboutus /而不是/ dyn/aboutus /,/ dyn /之後的所有內容都是蛞蝓)。 –

+0

flatpages應用程序基本上給了我所需的東西,但它缺少一些自定義功能,並且在使用它時不可能通過名稱引用URL。我發現需要做出妥協。現在,請記住我做錯了,是否可以在網站初始化後從URL conf中觸發重新生成URL? –

相關問題