Django URL:匹配固定数量的可选参数?

时间:2013-01-15 10:06:26

标签: python regex django django-urls

我想在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中为它们提供模式。

1 个答案:

答案 0 :(得分: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]*) ... ),

这将匹配所有网址