模型定义与一对多关系
指定一对多的关联关系,foreignkey定义在多的一方
模型定义:
class Grade(models.Model):
g_name = models.CharField(max_length=10)
create_time = models.DateTimeField(auto_now_add=True)
class Meta:
db_table = 'grade'
class Student(models.Model):
name = models.CharField(max_length=10, unique=True, verbose_name='姓名')
age = models.IntegerField(default=18, verbose_name='年龄')
gender = models.BooleanField(default=1, verbose_name='性别')
# auto_now_add:创建数据时,默认create_time字段为当前时间
create_time = models.DateTimeField(auto_now_add=True, null=True, verbose_name='创建时间')
# auto_now:修改时间,每次update学生信息时,修改该字段的时间为当前的时间
operate_time = models.DateTimeField(auto_now=True, null=True, verbose_name='修改时间')
chinese = models.DecimalField(max_digits=4, decimal_places=1, null=True, verbose_name='语文')
math = models.DecimalField(max_digits=4, decimal_places=1, null=True, verbose_name='数学')
# 指定学生和班级的关联关系,foreignkey定义在多的一方
g = models.ForeignKey(Grade, null=True)
def __str__(self):
return self.name
class Meta:
# 指定student模型映射到数据库中时,对应的表名
db_table = 'student'
verbose_name = '学生'
verbose_name_plural = '学生'
一对多的正向查询和反向查询
正向查询
def sel_grade_by_stu(request):
stu = Student.objects.filter(name='貂蝉').first()
name = stu.g.g_name
return HttpResponse(name)
反向查询
def sel_stu_by_grade(request):
grade = Grade.objects.filter(g_name='Java').first()
stus = grade.student_set.all()
return HttpResponse(stus)
多对多关联关系
模型定义: ManyToManyField字段定义在关联的任何一个模型中都可以
class Course(models.Model):
c_name = models.CharField(max_length=10)
# ManyToManyField字段定义在关联的任何一个模型中都可以
stu = models.ManyToManyField(Student)
class Meta:
db_table = 'course'
完成迁移后,后生成course表和course_stu的中间表
1.JPG
添加和删除多对多关联关系
def stu_cou(request):
# 添加学生和课程的关系
# 给 貂蝉 加线代课
stu = Student.objects.get(name='貂蝉')
cou = Course.objects.get(c_name='线代')
# 通过人查询课程,并添加课程
stu.course_set.add(cou)
# 删除人的课程
stu.course_set.remove(cou)
return HttpResponse('添加和删除学生和课程之间的关联关系')
模板
在项目和应用的同一级目录创建templates文件夹,用于存放模板文件
在settings文件中配置模板路径
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [os.path.join(BASE_DIR, 'templates')],
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
],
},
},
]
创建路由:
# 返回首页index.html
url('^index/', views.index),
在views.py文件中使用render方法渲染页面
def index(request):
stus = Student.objects.all()
return render(request, 'index.html', {'students': stus})
for 循环 和 List内容的显示
{% for i in TutorialList %}
{{ i }}
{% endfor %}
遍历字典
{% for key, value in info_dict.items %}
{{ key }}: {{ value }}
{% endfor %}
forloop变量
变量 | 描述 |
---|---|
forloop.counter | 索引从 1 开始算 |
forloop.counter0 | 索引从 0 开始算 |
forloop.revcounter | 索引从最大长度到 1 |
forloop.revcounter0 | 索引从最大长度到 0 |
forloop.first | 当遍历的元素为第一项时为真 |
forloop.last | 当遍历的元素为最后一项时为真 |
forloop.parentloop | 用在嵌套的 for 循环中,获取上一层 for 循环的 forloop |
for - empty - endfor
<ul>
{% for athlete in athlete_list %}
<li>{{ athlete.name }}</li>
{% empty %}
<li>抱歉,列表为空</li>
{% endfor %}
</ul>
模板中的逻辑操作
==, !=, >=, <=, >, < 这些比较都可以在模板中使用
{% if var >= 90 %}
成绩优秀,自强学堂你没少去吧!学得不错
{% elif var >= 80 %}
成绩良好
{% elif var >= 70 %}
成绩一般
{% elif var >= 60 %}
需要努力
{% else %}
不及格啊,大哥!多去自强学堂学习啊!
{% endif %}
and, or, not, in, not in 也可以在模板中使用
假如我们判断 num 是不是在 0 到 100 之间:
{% if num <= 100 and num >= 0 %}
num在0到100之间
{% else %}
数值不在范围之内!
{% endif %}
假如我们判断 'ziqiangxuetang' 在不在一个列表变量 List 中:
{% if 'ziqiangxuetang' in List %}
自强学堂在名单中
{% endif %}
静态资源
创建static文件夹,存放css、js等文件
在settings.py文件中配置静态文件加载路径
STATICFILES_DIRS = [
os.path.join(BASE_DIR, 'static')
]
继承
两种加载方法:
第一种:
{% block css %}
<link href="/static/css/index.css" rel="stylesheet">
{% endblock %}
第二种:
{% block css %}
{% load static %}
<link href="{% static 'css/index.css' %}" rel="stylesheet">
{% endblock %}
模板之间的继承
base.html、base_main.html、index.html
base.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>
{% block title %}
{% endblock %}
</title>
{% block css %}
{% endblock %}
{% block js %}
{% endblock %}
</head>
<body>
{% block content %}
{% endblock %}
</body>
</html>
base_main.html
{% extends 'base.html' %}
{% block js %}
<script src="https://cdn.staticfile.org/jquery/2.1.1/jquery.min.js"></script>
{% endblock %}
index.html
{% extends 'base_main.html' %}
{% block title %}
标题
{% endblock %}
{% block css %}
{# <link href="/static/css/index.css" rel="stylesheet">#}
{% load static %}
<link href="{% static 'css/index.css' %}" rel="stylesheet">
{% endblock %}
{% block js %}
{{ block.super }}
<script src="https://cdn.staticfile.org/jquery/1.10.2/jquery.min.js"></script>
{% endblock %}
{% block content %}
{% endblock %}
网友评论