Django模板语法错误排查及学校列表详情页实现求助
问题1:TemplateSyntaxError 错误修复
错误信息明确指向第10行的{% endblock %}标签不符合预期,要求是{% endfor %}或{% empty %}。这说明你的school_list.html模板里for循环标签闭合错误:
- 检查模板中
{% for %}标签的位置,每个{% for %}必须用{% endfor %}闭合,别误写成{% endblock %} - 如果用到了
{% empty %}分支,要保证结构完整,示例:
{% for school in schools %} <!-- 循环内容 --> {% empty %} <!-- 无数据时的提示内容 --> {% endfor %}
问题2:实现学校名称跳转详情页功能
1. 配置URL路由
在app的urls.py里添加详情页路由:
from django.urls import path from . import views urlpatterns = [ path('schools/', views.school_list, name='school_list'), # 新增详情页路由,用学校主键作为访问参数 path('schools/<int:pk>/', views.school_detail, name='school_detail'), ]
2. 编写详情页视图
在Views.py里添加处理详情页的视图:
from django.shortcuts import render, get_object_or_404 from .models import School def school_detail(request, pk): # 根据主键获取学校,不存在则返回404 school = get_object_or_404(School, pk=pk) return render(request, 'basic_app/school_detail.html', {'school': school}) # 用类视图的写法更简洁: # from django.views.generic.detail import DetailView # class SchoolDetailView(DetailView): # model = School # template_name = 'basic_app/school_detail.html'
3. 修改列表模板实现跳转
在school_list.html里把学校名称改成可点击的链接,用Django的{% url %}标签生成详情页地址:
{% extends 'basic_app/basic_app_base.html' %} {% block body_block %} <h1>学校列表</h1> {% for school in schools %} <h2><a href="{% url 'school_detail' pk=school.pk %}">{{ school.name }}</a></h2> <p>地址:{{ school.address }}</p> <hr> {% endfor %} {% endblock %}
4. 确认模型字段完整性
检查models.py里的School模型,确保包含必要字段:
from django.db import models class School(models.Model): name = models.CharField(max_length=256) address = models.CharField(max_length=256) # 其他自定义字段... def __str__(self): return self.name
内容的提问来源于stack exchange,提问作者Santosh Chapagain
相关产品推荐
相关产品推荐

