我在以下应用中的网址模式:
urlpatterns = [
url(r'^show/(?P<arg1>[\w\d_\.]+)$', views.view_1),
url(r'^show/(?P<arg1>[\w\d_\.]+)/(?P<arg2>[\w\d_\.]+)$', views.view_2),
url(r'^show/(?P<arg1>[\w\d_\.]+)/(?P<arg2>[\w\d_\.]+)/(?P<arg3>[\w\d_\.]+)$', views.view_3),
]
网址:/show/in_arg1/in_arg2%2F_this_is_arg2
与view_3匹配
但我想让网址匹配view_2
我尝试更改像
这样的urlpatternsurlpatterns = [
url(r'^show/(?P<arg1>[\w\d_\.]+)$', views.view_1),
url(r'^show/(?P<arg1>[\w\d_\.]+)/(?P<arg2>[\w\d_\.\/]+)$', views.view_2),
url(r'^show/(?P<arg1>[\w\d_\.]+)/(?P<arg2>[\w\d_\.\/]+)/(?P<arg3>[\w\d_\.]+)$', views.view_3),
]
网址:/show/in_arg1/in_arg2%2F_this_is_arg2
效果很好
但网址/show/in_arg1/in_arg2/in_arg3
将与view_2匹配,而不是我想要的
似乎django将%2F解码为/ url匹配之前
我可以让django在没有解码%2F的情况下进行网址匹配吗?
或者某种方式来解决我的问题
感谢
答案 0 :(得分:0)
\/
中的(?P<arg2>[\w\d_\.\/]+)
让你搞砸了。他们甚至会匹配show/a//b
!
试试这些:
urlpatterns = [
url(r'^show/(?P<arg1>[\w\d_\.]+)$', views.view_1),
url(r'^show/(?P<arg1>[\w\d_\.]+)/(?P<arg2>[\w\d_\.]+)$', views.view_2),
url(r'^show/(?P<arg1>[\w\d_\.]+)/(?P<arg2>[\w\d_\.]+)/(?P<arg3>[\w\d_\.]+)$', views.view_3),
]
在正则表达式中更精明的人可能会对你有所帮助。