我在django有一个博客应用程序,我想为每个帖子制作一个模板,但它只是不起作用。可能是什么错误?
这是我的代码
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)})
...
urlpatterns = [
path('post/(.*)', product_views.post),
path('', product_views.index),
path('admin/', admin.site.urls),
]
答案 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),