2013-12-23 42 views
-2

在django doc中建議改爲GET方法使用urlpatterns,並且使得處理這些變量的方法變得容易。但是,如果至少有一個變量不是必需的,我將不得不在url.py中寫更多行。我喜歡我可以避免這種情況?如何在URL中定義多個可選變量?

例子: 如果我想利用職位的樣品中某一年,在URL模式我要補充的是這樣的:

url(r'^articles/(?P<year>\d{4})/$', 'news.views.show_archive'), 

網址:... /用品/ 1994/

如果我想爲特定月份的樣本位置的具體年份,在URL模式我要補充的是這樣的:

url(r'^articles/(?P<year>\d{4})/(?P<month>\d{2})/$', 'news.views.show_archive'), 

網址:... /用品/ 2003/03/

但如果我想看創造一年內的具體月份我也必須加入這一行的所有年份的記錄:

url(r'^articles/(?P<month>\d{2})/$', 'news.views.show_archive'), 

網址:... /文章/ 03/

但我想這樣做只有一個行指定最大一組變量,但會處理這些URL中的任何一個。 說實話,我不確定這是可能的。

+3

你能提供你的代碼的例子嗎? – iMom0

+0

您始終可以實現自定義路由器。 – That1Guy

回答

1

正則表達式可以有可選的部分,而視圖函數可以有可選的參數。此外,您仍然可以使用查詢字符串(通過request.GET)查找沒有業務作爲URL一部分的內容(例如「搜索」視圖的查詢條件,列表視圖的排序和過濾等)。

使用urlpatterns代替querystrings的要點是構建乾淨的「語義」url,即/blog/posts/<post_id>/而不是/blog/posts/?post_id=<post_id>

+0

我在正則表達式中「不好」。我如何指定某個部分是可選的? – Atterratio

+0

(...)?我可以谷歌自己) – Atterratio

+0

http://docs.python.org/2/library/re.html#regular-expression-syntax –

0

你可以嘗試這樣的

url(r'^articles/(?P<year>\d{4})/(?P<month>\d{2})/$', 'news.views.show_archive'), 


def show_archive(request,year=None,month=None): 
    if year and month: 
     ..................... 
    elif year: 
     ..................... 
    elif month: 
     ....................