单页帖子网址django

时间:2018-04-24 15:16:48

标签: python django url

我在django有一个博客应用程序,我想为每个帖子制作一个模板,但它只是不起作用。可能是什么错误?

这是我的代码

Views.py

from django.shortcuts import render, render_to_response , get_object_or_404
from .models import Post


# Create your views here.
def index(request):
    posts=Post.objects.all()
    return render(request, 'Index.html', {"posts": posts})


def post(request, slug):
    print(slug)
    return render_to_response('post.html', {'post': get_object_or_404(Post, slug=slug)})

urls.py

...
urlpatterns = [
    path('post/(.*)', product_views.post),
    path('', product_views.index),
    path('admin/', admin.site.urls),
]

2 个答案:

答案 0 :(得分:0)

您可以使用通用的DetailView来更轻松地实现您想要的目标。

urls.py:

urlpatterns = [
    path('', product_views.index),
    path('admin/', admin.site.urls),
    path('post/<int:pk>', product_views.PostDetailView.as_view(), name='post-detail'),
]

views.py:

class PostDetailView(generic.DetailView):
    model = Post
来自Mozilla的

Here is a nice tutorial引导您完成。

答案 1 :(得分:0)

不要使用render_to_response,它已经过时了。请改用render

def post(request, slug):
    post = get_object_or_404(Post, slug=slug)
    return render(request, 'post.html', {'post': post})

然后您需要修复您的网址格式。您不应该将.*等正则表达式与path()一起使用。要捕获slug,你可以这样做:

path('post/<slug:slug>', product_views.post),