Django url斜杠匹配

时间:2018-02-07 12:01:19

标签: python regex django

我在以下应用中的网址模式:

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

我尝试更改像

这样的urlpatterns
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效果很好

但网址/show/in_arg1/in_arg2/in_arg3将与view_2匹配,而不是我想要的

似乎django将%2F解码为/ url匹配之前

我可以让django在没有解码%2F的情况下进行网址匹配吗?

或者某种方式来解决我的问题

感谢

1 个答案:

答案 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),
]

在正则表达式中更精明的人可能会对你有所帮助。