【问题标题】:Django URLs: matching a fixed number of optional parameters?Django URL:匹配固定数量的可选参数?
【发布时间】:2012-12-29 09:45:56
【问题描述】:

我想在我的 Django URL 调度程序中匹配以下形式的 URL:

 /(?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 中为它们提供模式。

【问题讨论】:

  • 这并不复杂。只需拆分 / 并依次检查每个元素。
  • 你的意思是把整个东西当作一个字符串,在视图中处理?

标签: python regex django django-urls


【解决方案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]*) ... ),

这将几乎匹配所有网址

【讨论】:

    猜你喜欢
    • 2019-01-15
    • 2012-12-30
    • 1970-01-01
    • 1970-01-01
    • 2021-12-24
    • 2020-10-10
    • 1970-01-01
    相关资源
    最近更新 更多