Django模板无法渲染内容:blogpost页面无内容显示求助
问题修复方案
1. 修正视图函数的参数与查询逻辑
你的views.py里的blogpost函数存在两个关键错误:
- 函数参数定义为
post_id,但URL传递的是slug参数,参数名不匹配,导致无法获取URL中的slug值 - 查询时使用了未定义的变量
slug,同时filter()返回的是查询集合(QuerySet),若要获取单篇文章,应使用get()或first()获取单个对象,推荐用get_object_or_404,找不到内容时直接返回404页面更合理
修改后的blogpost函数:
from django.shortcuts import render, get_object_or_404 from blog.models import Post def blogpost(request, slug): post = get_object_or_404(Post, slug=slug) print(post) context = {'post': post} return render(request, 'blog/blogpost.html', context)
2. 修正模板细节
模板中存在拼写错误(contaier应为container),虽不影响内容显示,但修正后更规范;同时确保模板渲染的是单个对象的属性:
{% extends 'basic.html' %} {% block title %}Blog{% endblock title %} {% block body %} <div class="container"> <div class="row"> <div class="col-md-8 py-4"> <h2 class="blog-post-title">{{post.title}}</h2> </div> </div> </div> {% endblock body %}
3. 额外验证点
- 确认
Post模型中存在slug字段,且数据库内已有文章数据,URL中传递的slug值与数据库内的slug完全匹配 - 访问文章页面时,URL格式应为
http://你的域名/文章slug,确保slug参数正确传递
内容的提问来源于stack exchange,提问作者user19380298
相关产品推荐
相关产品推荐

