-1

编辑:想通了,请看底部。

我正在用 Django 编写一个简单的博客应用程序,并使用指南在本地部署它。我已经完成了指南,一切都是名义上的,所以我决定扩展功能来查看博客文章的存档。这就是索引目前的功能,但我想将其移至 /archive/。我再次去看教程以刷新我的记忆,它说我必须做三件事:

  1. 在 urls.py 中写入根 URLconf
  2. 在views.py中编写视图函数
  3. 为视图编写模板

我将 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 错误,告诉我No Post 与给定的查询匹配。我错过了什么?

回答

我记得阅读您的 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'),
)

现在工作。谁能解释为什么?

4

1 回答 1

0

/archive/URL 是第一个匹配的,因此从未达到url(r'^(?P<slug>[\w\-]+)/$', 'RehabLog.views.post')您的实际规则。url(r'^archive/', 'RehabLog.views.archive')当您更改顺序时,匹配的第一个规则是正确的。

于 2013-07-05T09:10:21.717 回答