我的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'),
)
答案 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'),