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?

如何在 django 中的所有 url 使用 slug 之前或之后没有任何内容?

Django:两个模型中的一个 url 搜索(cbv)

slug url 不会显示没有连字符的 url

批量更改 django 数据库 slug 数据

在 URL 中同时显示 slug 和 ID,但仅在 Django 中按 ID 路由