我的項目中的大多數視圖接受可選的用戶名參數,如果存在,請過濾傳遞給該用戶模板的查詢集。因此,舉例來說:DRYness的Django url配置
索引視圖處理以下兩個URL模式:
'^$' # general index page
'^(?P<username>[-\w]+)/$' # index page for the user
'^photos/$' # photo index page
'^(?P<username>[-\w]+)/photos/$' # photos for that user
...
由於有許多這樣的應用中,它似乎並不很乾通過複製來實現相同的邏輯圖案。我認爲這是可能的遞歸包括主urls.py模塊,所以我這樣做:
url(r'^(?P<username>[-\w]+)/', include('urls')),
我的理由是,當包含其他URL模塊,匹配模式是從路徑刪除。所以,我希望
'^(?P<username>[-\w]+)/photos/$'
將成爲
'^photos/$'
當它是由遞歸包含的URL匹配模塊,具有額外的username參數。但是這導致開發服務器在發出請求時靜靜地死去。
我能想到的第二種方法是編寫一箇中間件,它將匹配url中的模式(如果存在),並將查看的用戶添加到請求中,並從請求路徑中刪除與用戶名匹配的部分。但我不想搗亂這條路,因爲這可能會有不可預測的結果。
你會推薦什麼?我對DRYness太挑剔了嗎?
感謝, OMAT
謝謝,它會幫助更乾淨的模式,但在實際情況下,每個應用程序都有自己的urls.py文件,其中包括。因此,對於每個應用程序,應將所有模式複製到他們自己的urls.py中,並使用與用戶名匹配的備選方案。 – omat 2010-06-29 13:24:11
除了重複之外,由於應用網址包含爲'(r'^ photo /',include('photos.urls'))',用戶照片的網址爲'/ photo/[username] /'。 – omat 2010-06-29 13:37:13