在Django开发个人博客时,我在代码中遇到了一个令人讨厌的错误.基本上,我已经通过添加一些规则来更改我的urls.py文件,以使某些视图可访问.
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'),
]
Run Code Online (Sandbox Code Playgroud)
一切似乎都在工作,除非我尝试访问http://127.0.0.1:8000/或/ post,Django抛出404错误.这是什么原因?我已经定义了两个规则,但系统似乎没有认识到这种模式 - 也许我错了一些东西?也许我对url格式一无所知(可能是,这是我第一次做这些事情)?
非常感谢新手程序员给每个发现错误的人:)
网址模式从上到下进行处理.你的第三个模式^(?P<slug>\w+)消耗了一切,所以about并posts从未达到.
一个例子:Django想要找到url的视图about/.模式^admin/与^$不匹配.但是^(?P<slug>\w+),因为about以字母或数字开头(包含在其中的字符集\w)
>>> import re
>>> re.search('^(?P<slug>\w+)', 'about/')
<_sre.SRE_Match object at 0x10b5b7be8>
Run Code Online (Sandbox Code Playgroud)
所以Django找到了一个匹配,callBs views.view_post并完成了请求.这意味着,必须首先采用更具体的规则.更好:避免歧义.
| 归档时间: |
|
| 查看次数: |
1053 次 |
| 最近记录: |