Django URL奇怪的行为

时间:2015-07-13 03:31:19

标签: python regex django

我一直在尝试编写一个简单的应用程序,并遇到了这个奇怪的问题。请看下面,我的urls.py,首先:

这是我的urls.py文件:

from django.conf.urls import url
from . import views

urlpatterns = [
url(r'^$', views.home, name='home'),
url(r'^(?P<label_slug>[\w-]+)/$', views.tasks, name='tasks'),
url(r'^add-label/$', views.add_label, name='add_label'), # this URL is acting funny
url(r'(?P<label_slug>[\w\-]+)/add_task/$', views.add_task, name='add_task'),
]

所以每当我访问我的第三个网址(/ add)时,它都会进入404错误页面,但是当我添加像label / add这样的东西时,它似乎有效。有人能告诉我如何解决这个问题吗?

这就是404错误页面所说的内容:

Page not found (404)
Request Method:     GET
Request URL:    http://localhost:8000/tasks/add/
Raised by:  tasks.views.tasks

No TaskLabel matches the given query.

1 个答案:

答案 0 :(得分:2)

您的网址'^(?P<label_slug>[\w-]+)/$'正在考虑/add-label认为它是一个任务的slu and并调用视图tasks.views.tasks

按照通用性的升序列出URL正则表达式

作为一种好的做法,您应该始终将更通用的正则表达式URL放在底部,因为URL按此顺序进行评估

urlpatterns = [
    url(r'^$', views.home, name='home'),
    url(r'^add-label/$', views.add_label, name='add_label'),
    url(r'^(?P<label_slug>[\w-]+)/$', views.tasks, name='tasks'),
    url(r'(?P<label_slug>[\w\-]+)/add_task/$', views.add_task, name='add_task'),
]