Django slug 更改 URL 但没有获得详细视图
Posted
技术标签:
【中文标题】Django slug 更改 URL 但没有获得详细视图【英文标题】:Django slug changes URL but doesn't get detail view 【发布时间】:2014-05-31 17:46:24 【问题描述】:在 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'),
)
这是我的意见.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)
部分,但我也知道它并没有那么远 - 尝试添加打印语句以查看函数是否被调用显示什么。
我也有点不确定locals()
的论点。我一直在使用它,但坦率地说,只是因为我仍然不确定如何使用数据字典。
假设模板 all.html 和 single.html 是正确的。
谢谢!
【问题讨论】:
【参考方案1】:问题是你的第一个正则表达式没有根。它匹配 '$' 基本上意味着“任何结束的字符串” - 这就是一切。所以 所有 URL 最终都会被该模式匹配。
应该是^$
,即空字符串。
【讨论】:
以上是关于Django slug 更改 URL 但没有获得详细视图的主要内容,如果未能解决你的问题,请参考以下文章
请问如何在我的 url.py django 3 中使用 slug 创建 url?