模型
1 | from django.db import models |
视图页面
1 | from django.db.models import Avg, Count, Sum, Max, Min, Q, F |
1.模型类型1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38 一对一:OneToOneField
一对多:Foreignkey
多对多:ManyToManyFiled
class Student:
# OneToOneField定义在任何一方都可以
stu_info = modles.OneToOneField(Student)
# Foreignkey定义在多的一方
g = modles.Foreignkey(Grade)
# ManyToManyFiled定义在任何一方都可以
c = modles.ManyToManyFiled(Course)
class StuInfo:
id = AutoField()
class Grade:
id = AutoField()
class Course:
id = AutoField()
已知学生对象stu:
- 查询班级:stu.g
- 查询拓展表:stu.stu_info
- 查询课程:stu.c
已知拓展表stu_info对象:
- 查询学生:stu_info.student
已知班级对象grade:
- 查询学生:grade.student_set
已知课程对象course:
- 查询学生:course.student_set
一对一:知道一,查询一,对象点属性字段/对象点查询对象的小写
一对多:知道多,查询一,对象点查询对象的小写_set
多对多:分解成一对多,知道多,查询一
2.模板
index 继承 base_main, base_main 继承 base; 在base中,是一个完整的html结构,并挖坑,在base_main中,是一些通用的样式,在index中是每个页面中自己的内容
base中的内容
1
2
3
4
5
6
7
8
9
10
11
12
13
14<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>
{% block title %}
{% endblock %}
</title>
</head>
<body>
{% block content}
{% endblock %}
</body>
</html>
base_main中的内容
1
2
3
4
5
6
7
8
9{% extends 'base.html' %}
{% block title %}
{% endblock %}
{% block content %}
{% endblock %}
index页面或者其他页面的内容
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15{% extends 'base.main.html' %}
{% block title %}
登录
{% endblock %}
{% block content %}
<form action="" method="post">
<p>账号:<input type="text" name="username"></p>
<p>密码:<input type="password" name="password"></p>
<p><input type="submit" value="提交"></p>
</form>
{% endblock %}
解析标签:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17{% 标签 %}
标签有for、if、comment、static、ifequal、block、extends
{% end标签 %}
example:
# 改变编号1的颜色
<td {% if forloop.counter == 1 %}
style="color:red;"
{% endif %}>
{{ stu.name }}
</td>
# 改变编号1的字体大小
<td {% ifequal forloop.counter 1 %}
style="font-size:30px;"
{% endifequal %}>
{{ stu.age }}
</td>注释:
1
2
3
4
5
6
7
8<!--注解一:在检查源代码的时候能看到,解析的时候也会解析,如果这个注解有错,访问的时候也会出现问题-->
{# 注解二:{% for 标签用于循环 %} {% endfor 结束标签 %}:检查源代码的时候看不到,出现错误也不会影响用户访问,推荐使用 #}
{% comment %}
<P>我是注解三</P>
检查源代码的时候看不到,出现错误也不会影响用户访问,可以使用
{% endcomment %}解析变量:
-
1
2
3
4def index(request):
# 变量stus,通过index.html解析students的值stus
stus = Student.objects.all()
return render(request, 'index.html', {'students': stus}) 循环:
- forloop.counter:从1正序编号
- forloop.counter0:从0正序编号
- forloop.revcounter:倒序编号
- forloop.first:取到第一个
- forloop.last:取到最后一个
继承:
- 通用的css、js以及其它的内容写在base_main中,index继承其中的内容
1
2
3{% block xxx %}
{{ block.super }}
{% endblock %}
- 通用的css、js以及其它的内容写在base_main中,index继承其中的内容
静态加载:
STATICFILES_DIRS = [os.path.join(BASE_DIR, 'static')]
CSS
第一种方式:
1
2
3{% block css %}
<link href="/static/css/index.css">
{% endblock %}第二种方式:
1
2
3
4{% block css %}
{% load static %}
<link rel="stylesheet" href="{% static 'css/index.css' %}">
{% endblock %}
JS
- 在父模板中挖JS坑,在子模板中直接继承,不用填坑
- 不仅要继承JS,还要引入自己的JS模板
1
2
3
4{% block js %}
{{ block.super }}
<script src="my.js"></script>
{% endblock %}