【问题标题】:Django url - matching value from list/tupleDjango url - 来自列表/元组的匹配值
【发布时间】:2017-02-08 11:23:48
【问题描述】:

目前在我的 urls.py 中有类似的内容:

url(r'^(?P<my_var>:|var1|var2|var3|other_string)/rest_of_url'

匹配
/var1/rest_of_url var2/rest_of_url var3/rest_of_url other_string/rest_of_url
我想要一个变量列表/元组:

VARIABLES = ('var1', 'var2', 'var3')

这可以存储可以在我的网址中匹配的变量。
但是我不知道任何可以做到这一点的 django 正则表达式。准确地说,我的目标是:

url(r'^(?P<my_var>:regex_matching_any_of_VARIABLES|other_string)/rest_of_url'

【问题讨论】:

  • 您最好在视图中验证 my_var,如果 my_var 不在您接受的变量列表中,则返回 404。

标签: python regex django


【解决方案1】:

您可以对元组执行'|'.join 并将其添加到模式中:

pattern = r'^(?P<my_var>:|' + '|'.join(VARIABLES) + r'|other_string)/rest_of_url'
url(pattern, ...)

【讨论】:

    【解决方案2】:

    您可以尝试使用两种 url 模式。虽然有点冗长。 首先它尝试与您的变量匹配,然后是通用模式。

    VALID_VALUES = '|'.join(["var1","var2","var3"])
    urlpatterns = patterns('',
       url(r'^(?P<var_type>(%s))/rest_of_url/$' % VALID_VALUES,
                               'your_view'),
       url(r'^(?P<var_type>[\w\d-]+)/rest_of_url/$',
                            'your_view')
    
    )
    

    【讨论】:

      猜你喜欢
      • 2020-10-21
      • 1970-01-01
      • 2017-11-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多