在使用 Django 开发个人博客时,我在代码中遇到了一个严重的错误。基本上,我通过添加一些规则来更改我的 urls.py 文件以使某些 View 可访问。
urls.py
from django.conf.urls import include, url
from django.contrib import admin
from blog import views
urlpatterns = [
# Examples:
# url(r'^$', 'blogas.views.home', name='home'),
# url(r'^blog/', include('blog.urls')),
url(r'^admin/', include(admin.site.urls)),
url(r'^$', views.index, name='index'),
url(r'^(?P<slug>\w+)', views.view_post, name='view_blog_post'),
url(r'^about/$', views.about, name='about'),
url(r'^posts/$', views.posts, name='posts'),
]
除了当我尝试访问 http://127.0.0.1:8000/
about 或/posts 时,一切似乎都正常,Django 抛出 404 错误。这是什么原因呢?我已经定义了这两个规则,但系统似乎无法识别该模式 - 也许我拼错了什么?也许我对 url 格式一无所知(可能是,这是我第一次做这些东西)?
新手程序员非常感谢所有发现错误的人:)
最佳答案
url-patterns 是从上到下处理的。你的第三个模式 ^(?P<slug>\w+)
消耗一切,所以about
和 posts
永远不会达到。
一个例子:Django 想要找到 url about/
的 View .图案 ^admin/
和 ^$
不匹配。但是^(?P<slug>\w+)
会,因为 about
以字母或数字开头(\w
中包含的字符集)
>>> import re
>>> re.search('^(?P<slug>\w+)', 'about/')
<_sre.SRE_Match object at 0x10b5b7be8>
所以 Django 找到了匹配项,调用 Bs views.view_post
并完成请求。这意味着,必须先制定更具体的规则。更好:避免歧义。
关于python - Django urls.py 错误-某些模式不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23716343/