让django网址忽略其他参数

时间:2014-04-08 12:27:11

标签: python regex django

我的django网址模式为

url(r'^site/(?P<site_level>[\S]+)/$', site_details, name='site_details'),

适用于网址http://127.0.0.1:8000/site/level1/ 并且site_level值将为level1

但是如果用户输入了http://127.0.0.1:8000/site/level1/some-dummy-text这样的网址 然后site_level值变为level1/some-dummy-text

通过更改url的当前正则表达式,可以忽略site_level variable之后的垃圾值,即此文本/some-dummy-text

url(r'^site/(?P<site_level>[\S]+)/$', site_details, name='site_details'),

每次处理变量

时,我是否必须进行手动检查

2 个答案:

答案 0 :(得分:1)

您对site_level的正则表达式是[\ S] +,它表示匹配任意数量的非空白字符。这称为“贪婪匹配”,这意味着它将斜杠和所有内容匹配到URL的末尾。所以有意义的是它一直匹配到位置的末尾。

您应该将正则表达式更改为不贪婪,或仅匹配非斜杠字符。这样,如果发生斜线,它将被分解为该位置的后续部分。

url(r'^site/(?P<site_level>[^\/]+)/', site_details, name='site_details'),

注意我还拿出了与行尾相匹配的$。您可能需要添加第二个模式以匹配site_level之后的其余模式。

答案 1 :(得分:0)

也许您应该更改正则表达式以避免使用'/'字符:

url(r'^site/(?P<site_level>\w+)/(?P<garbage>)\S*)$', 
    site_details, name='site_details'),