本篇文章主要讲解Django 3.0框架配置模板路径,并使用视图和模板结合实现一些小功能。
概述
模板是html页面,可以根据视图中传递过来的数据进行填充。
在project中创建templates目录和应用模板目录
如templates/myapp
配置模板路径
修改settings.py文件下TEMPLATES->DIRS
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [os.path.join(BASE_DIR, 'templates')],
'APP_DIRS': True,
班级列表
显示所有班级
http://127.0.0.1:8000/grades
定义路由
urlpatterns = [
path('', views.index, name='index'),
path('<int:num>', views.detail, name='detail'),
path('grades', views.grades, name='grades')
]
定义模板
在templates/myapp中创建grades.html
模板语法
{{输出值,也可以是变量和对象.属性}}
{% 执行代码段 %}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>班级列表</title>
</head>
<body>
<h1>班级信息列表</h1>
<table>
<thead>
<tr>
<th>ID</th>
<th>名称</th>
<th>男生数</th>
<th>女生数</th>
<th>创建时间</th>
</tr>
</thead>
<tbody>
{% for grade in grades %}
<tr>
<td>{{grade.id}}</td>
<td><a href="#">{{grade.name}}</a></td>
<td>{{grade.boy_num}}</td>
<td>{{grade.girl_num}}</td>
<td>{{grade.create_time}}</td>
</tr>
{% endfor %}
</tbody>
</table>
</body>
</html>
定义视图
myapp/views.py新增视图方法
def grades(request):
""" 班级列表 """
# 去模型里取数据
gradesList = Grades.objects.all()
# 将数据传递给模板,模板渲染页面,将渲染好的页面返回给浏览器
return render(request, 'myapp/grades.html', {'grades': gradesList})
效果如下:
班级详情
需求:点击班级,显示班级所有学生
定义路由
path('grades/<int:id>', views.grades_detail, name='grades_detail')
修改列表a标签
<td><a href="grades/{{grade.id}}">{{grade.name}}</a></td>
创建模板
在templates/myapp中创建students.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>班级详情</title>
</head>
<body>
<h1>班级详情</h1>
<table>
<thead>
<tr>
<th>ID</th>
<th>名称</th>
<th>性别</th>
<th>年龄</th>
<th>描述</th>
<th>是否删除</th>
</tr>
</thead>
<tbody>
{% for item in studentsList %}
<tr>
<td>{{item.id}}</td>
<td><a href="#">{{item.name}}</a></td>
<td>{{item.gender}}</td>
<td>{{item.age}}</td>
<td>{{item.desc}}</td>
<td>{{item.isDel}}</td>
</tr>
{% endfor %}
</tbody>
</table>
</body>
</html>
定义视图
def grades_detail(request, id):
""" 班级详情 """
# 查询当前班级
grades = Grades.objects.get(pk=id)
# 查询班级所有学生
studentsList = grades.students_set.all()
return render(request, 'myapp/students.html', {'studentsList': studentsList})
效果如下:
总结
因为只是模板的基本使用,故而有很多未实现。