dlango中的url模式匹配令人困惑

时间:2016-06-05 09:43:03

标签: python django

我有一个url.py文件,如下所示 -

app_name = "fronta"
urlpatterns = [
    url(r'^$', views.index, name='index'),
    url(r'home/', views.index, name='home'),
    url(r'lostform/', views.lostform, name='lostform'),
    url(r'submitlostform/',views.submitlostform, name="submitlostform"),
]

我为下面的表单设置了操作 -

<form  method="post" action="{% url 'fronta:submitlostform'%}">

点击提交按钮后,地址栏中的网址会从http://localhost:8000/fronta/lostform/更改为http://localhost:8000/fronta/submitlostform/,但网页重定向。

但是,如果我更改urls.py文件中的url序列并将url(r'submitlostform/',views.submitlostform, name="submitlostform")行移动到url顶部,则可以正常工作并重定向页面。或者,如果我将网址格式submitlostform更改为lostformsubmit,则此方法也可以。

为什么会这样。我很困惑url模式匹配在这里是如何工作的。如果需要更多信息,请与我们联系。

1 个答案:

答案 0 :(得分:1)

正则表达式。

url(r'lostform/', views.lostform, name='lostform'),

这符合lostform/,但123lostform/lostform/123以及123lostform/321

将其更改为

url(r'^lostform/$', views.lostform, name='lostform'),
  • ^表示&#34;开始&#34;

  • $表示&#34;结束&#34;

相应地更改所有其他网址格式。

顺便说一句,这是第一个网址模式的含义:

url(r'^$', views.index, name='index'),

网址^的开头,后面没有任何字符,后跟网址的结尾$