编辑:想出来,请看底部。
我正在Django中编写一个简单的博客应用程序,并使用this指南在本地部署它。我已经完成了指南,所有内容都是名义上的,所以我决定扩展功能以查看博客文章的存档。这就是索引目前的功能,但我想把它移到/ archive /。我再次进入教程以刷新我的记忆,它说我必须做三件事:
我编辑了URLconf,如下所示:
urlpatterns = patterns('',
#other patterns
url(r'^archive/', 'RehabLog.views.archive'),
)
我编辑了我的views.py以添加此功能:
def archive(request):
posts = Post.objects.filter(published=True)
return render(request, 'RehabLog/archive.html', {'posts':posts})
我已经保存了所有并重新启动了工头。当我加载页面时,我收到404错误,告诉我没有帖子与给定查询匹配。我错过了什么?
答案
我记得读过URLConfs的顺序非常重要。
以前我曾经:
urlpatterns = patterns('',
url(r'^admin/', include(admin.site.urls)),
url(r'^$', 'RehabLog.views.index'),
url(r'^(?P<slug>[\w\-]+)/$', 'RehabLog.views.post'),
url(r'^archive/', 'RehabLog.views.archive'),
)
而现在我有:
urlpatterns = patterns('',
url(r'^admin/', include(admin.site.urls)),
url(r'^archive/', 'RehabLog.views.archive'),
url(r'^$', 'RehabLog.views.index'),
url(r'^(?P<slug>[\w\-]+)/$', 'RehabLog.views.post'),
)
现在有效。谁能解释为什么?
答案 0 :(得分:0)
/archive/
网址首先被url(r'^(?P<slug>[\w\-]+)/$', 'RehabLog.views.post')
匹配,因此您的实际规则url(r'^archive/', 'RehabLog.views.archive')
从未到达。当您更改订单时,匹配的第一个规则是正确的。