Django slug更改了URL,但没有获得详细信息视图

时间:2014-04-16 17:42:43

标签: python django django-views django-urls slug

在Django中建立一个博客,我怀疑匹配我的主要urls.py

有问题
from django.conf import settings
from django.conf.urls import patterns, include, url

urlpatterns = patterns('',
    url(r'$', 'posts.views.home'),
    url(r'^(?P<slug>[\w-]+)/$', 'posts.views.single'),
)

这是我的views.py

from django.http import HttpResponse, HttpResponseRedirect
from django.shortcuts import render_to_response, RequestContext, Http404, get_object_or_404

from .models import Post

def home(request):
    posts = Post.objects.filter(private=False)
    return render_to_response('all.html', locals(), context_instance=RequestContext(request))

def single(request, slug):
    post = Post.objects.filter(slug=slug)
    return render_to_response('single.html', locals(), context_instance=RequestContext(request))

基于功能的视图主页完美运行并返回所有非私人帖子。但是,单个视图会更改URL以生成正确的slug(即:127.0.0.1/this-correct-slug),但只是转到页面顶部并且不会对内容进行过滤(在终端中显示200 GET请求) )。使用post = get_object_or_404(Post, slug=slug)会产生相同的结果。

我不确定post = Post.objects.filter(slug=slug)部分,但我也知道它没有那么远 - 尝试添加print语句以查看函数是否被调用没有显示任何内容。

我也对locals()这个论点有些不确定。我一直在使用它,但坦率地说,仅仅是因为我还不确定如何使用数据字典。

假设模板all.html和single.html是正确的。

谢谢!

1 个答案:

答案 0 :(得分:1)

问题是你的第一个正则表达式没有根。它匹配'$',这基本上意味着“任何字符串结束” - 这就是一切。因此所有网址最终都会被该模式匹配。

它应该是^$,即空字符串。