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

标签 python django web

在使用 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+)消耗一切,所以aboutposts永远不会达到。

一个例子: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/

相关文章:

python - numpy,命名列

python - tkinter 按钮命令无需单击即可运行功能?

python - flask : How to make call-back function non-blocking using thread

c - C 文件如何包含在 freeSwitch(一种调用框架)中?

python - (Pygame/Python) 如何根据对象矩形的中间位置将对象放置在屏幕上?

Python PIL 没有属性 'Image'

python - 创建 Django REST Framework ViewSet 时卡住了

django - 单个 Django 应用程序的多个登录 URL

Django - 如何在 SqLite3 后端启用外键

asp.net - System.Web.HttpException 无法加载类型 '[namespace].???'