在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是正确的。
谢谢!
答案 0 :(得分:1)
问题是你的第一个正则表达式没有根。它匹配'$',这基本上意味着“任何字符串结束” - 这就是一切。因此所有网址最终都会被该模式匹配。
它应该是^$
,即空字符串。