Skip to main content
 首页 » 编程设计

python之Django urls.py 错误-某些模式不起作用

2025年05月04日38sharpest

在使用 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并完成请求。这意味着,必须先制定更具体的规则。更好:避免歧义。