Django模板渲染报错,如何按指定课程、学期、科目筛选渲染试题
问题修复方案
1. 核心逻辑错误修复(views.py)
你当前的ModelQuestions视图筛选逻辑错误:传入的id是Subject表的主键,你却用它来匹配TuModelQuestions的date字段,导致查不到对应试题。修改如下:
# =============MODEL QUESTIONS================ class ModelQuestions(View): def get(self,request,id): # 这里id是Subject的主键 subject_obj = Subject.objects.get(id=id) # 按关联的subject字段筛选,支持可选的年份参数 year = request.GET.get('year', None) if year: model_questions = TuModelQuestions.objects.filter(subject=subject_obj, date=int(year)) else: # 默认取该科目下所有试题,可根据需求调整为默认取最新年份 model_questions = TuModelQuestions.objects.filter(subject=subject_obj) return render(request, 'app/model-questions.html',{'subject':subject_obj, 'model_questions':model_questions})
2. 模板动态渲染修改(model-questions.html)
你当前模板写死了静态图片,需要改为动态渲染查询到的试题,同时给年份按钮加上跳转参数实现按年份筛选:
{% extends 'app/subject-base.html' %} {% load static %} {% block model-questions %} <div class="model-question"> <div class="container"> <div class="row"> <div class="col-lg-12"> <!-- 给年份按钮加参数,点击后筛选对应年份试题 --> <a href="?year=2070"><button type="button" class="btn btn-outline-light">2070</button></a> <a href="?year=2071"><button type="button" class="btn btn-outline-light">2071</button></a> <a href="?year=2072"><button type="button" class="btn btn-outline-light">2072</button></a> </div> </div> <div class="questions-year"> <div class="row"> <div class="col-lg-12"> {% for question in model_questions %} <div class="model-questions-box"> <!-- 动态渲染试题图片,注意用.url获取图片路径 --> <img src="{{ question.model_question.url }}" alt="{{ subject.subject_name }}-{{ question.date }}年试题" class="img-fluid"> </div> {% empty %} <p class="text-light">该年份暂无对应试题</p> {% endfor %} </div> </div> </div> </div> </div> {% endblock model-questions %}
3. 其他配置修正
- 你的应用
urls.py末尾缺少]闭合符,直接补上即可。 - 确保
settings.py中配置了媒体文件的访问路径,否则图片无法正常加载:# settings.py末尾添加 MEDIA_URL = '/media/' MEDIA_ROOT = BASE_DIR / 'media' - 项目根
urls.py中添加媒体文件的路由配置:from django.conf import settings from django.conf.urls.static import static urlpatterns = [ # 你原有路由配置 ] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
内容的提问来源于stack exchange,提问作者Ujjwol Neupane
相关产品推荐
相关产品推荐

