0

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

这是我的代码

视图.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)})

网址.py

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

2 回答 2

0

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

网址.py:

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

视图.py:

class PostDetailView(generic.DetailView):
    model = Post

这是来自 Mozilla 的一个很好的教程,它会引导你完成。

于 2018-04-24T15:28:51.453 回答
0

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

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

然后你需要修复你的 URL 模式。你不应该使用像.*with这样的正则表达式path()。要捕获蛞蝓,您可以执行以下操作:

path('post/<slug:slug>', product_views.post),
于 2018-04-24T15:32:14.783 回答