【问题标题】:Making a Regex Django URL Token Optional使正则表达式 Django URL 令牌可选
【发布时间】:2011-01-20 11:48:36
【问题描述】:

你有一个在 Django 中接受 first_namelast_name 的 URL:

('^(?P<first_name>[a-zA-Z]+)/(?P<last_name>[a-zA-Z]+)/$','some_method'),

如何在不创建任何新行的情况下包含 title 的可选 URL 令牌。我的意思是,在理想情况下:

#A regex constant
OP_REGEX = r'THIS IS OPTIONAL<title>[a-z]'
#Ideal URL
('^(?P<first_name>[a-zA-Z]+)/(?P<last_name>[a-zA-Z]+)/OP_REGEX/$','some_method'),

这是否可能不创建新行,即

('^(?P<first_name>[a-zA-Z]+)/(?P<last_name>[a-zA-Z]+)/(?P<title>[a-zA-Z]+)/$','some_method'),

【问题讨论】:

    标签: regex django url django-urls


    【解决方案1】:
    ('^(?P<first_name>[a-zA-Z]+)/(?P<last_name>[a-zA-Z]+)(?:/(?P<title>[a-zA-Z]+))?/$','some_method'),
    

    别忘了在视图中给title一个默认值。

    【讨论】:

    • 谢谢。我将如何创建一个可选的 URL 'titles'?即(?:/(?P&lt;title1&gt;[a-zA-Z]+))?(?:/(?P&lt;title2&gt;[a-zA-Z]+))? 感谢您的帮助
    • 请注意 ?: 在外部组中很重要。没有它,URL 将在导航到时正常工作,但 reverse() 不会注意到里面的参数。
    • official docs了解更多信息。
    【解决方案2】:

    如果您正在寻找多个可选参数,而没有任何必需的参数,只需在开头省略“/”,例如:

    re_path(r'^view(?:/(?P<dummy1>[a-zA-Z]+))?(?:/(?P<dummy2>[a-zA-Z]+))?(?:/(?P<dummy3>[a-zA-Z]+))?/$', views.MyView.as_view(), name='myname'),
    

    您可以在以下位置浏览:

    http://localhost:8000/view/?dummy1=value1&dummy2=value2&dummy3=value3
    

    【讨论】:

      猜你喜欢
      • 2011-07-20
      • 2012-06-15
      • 1970-01-01
      • 2019-01-15
      • 2011-03-22
      • 2013-07-26
      • 2014-07-08
      • 1970-01-01
      相关资源
      最近更新 更多