2013-01-15 41 views
0

我想在我的Django的URL調度符合下列形式的URL:Django網址:匹配固定數量的可選參數嗎?

/(?P<location>\w+)-holidays/in-(?P<month>\w+)/to-(?P<top_price>\d+) 

這個複雜的一點是,我想任何路徑的三個獨立的元素是可選的。所以我想匹配以下所有內容:

/venice-holidays 
/venice-holidays/in-june/ 
/venice-holidays/in-june/to-1000 
/venice-holidays/to-1000 
/in-june 
/in-june/to-1000 
/to-1000 

我可以使用Django URL模式來做到這一點嗎?對不起,如果這是重複的,我已經做了一些搜索,但找不到這個問題。

更新:我打算檢查locationmonth等在視圖中是否有效,而不是在URL中爲它們提供模式。

+0

這並不複雜。只需分割'/'並依次檢查每個元素。 – fge

+0

你的意思是將整個事物視爲單個字符串,並在視圖中處理它? – Richard

回答

1

我已經做了類似的事情,我解決了這個問題是這樣的:

url.py:

url(r'^(?P<location>[\w]+)/(?P<month>[\w]*)/?(?P<something>[\w]*)/?', ...), 

views.py:

def course_list(request, location, month = None, something = None): 

    if month: 
     # do stuff 

你真的希望將「基本路徑詞」作爲網址中的第一項。

如果你這樣做:

url(r^(?P<location>[\w]*) ...), 

,將匹配所有URL非常