美文网首页
Python Web框架 Django - 模型关联关系、模板

Python Web框架 Django - 模型关联关系、模板

作者: 莫名ypc | 来源:发表于2018-11-29 17:27 被阅读0次

模型定义与一对多关系

指定一对多的关联关系,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 %}

相关文章

  • Python Web框架 Django - 模型关联关系、模板

    模型定义与一对多关系 指定一对多的关联关系,foreignkey定义在多的一方模型定义: 一对多的正向查询和反向查...

  • Django介绍与框架整合,并使用MySQL实现增删改查

    Django简介 django是一个开放源代码的Python web应用框架。采用MTV模式,即模型M,模板T和视...

  • 2018-06-25

    一、前言 Django是一个开放源代码的Web应用框架,由Python写成。采用了MTV的框架模式,即模型M,模板...

  • Python Web项目(Python3.8.0+Django3

    一、前言 Django是一个开放源代码的Web应用框架,由Python写成。采用了MTV的框架模式,即模型M,模板...

  • django

    django是web应用框架,由python写成,采用mvt框架模式,即模型M,视图V和模板T,最初是为新闻网站开发的

  • 【学习笔记】01 django简介以及环境配置

    Django介绍 python的重量级的web框架(开放源码),python编写 Django版本介绍 MTV模型...

  • Flask框架

    Django框架---web后端框架 Django重量级框架模型类--->ORM映射对象关系映射(Object R...

  • Web应用框架

    Django-提供了构建Web系统的基本应用框架-MTV模式: 模型(model), 模板(Template), ...

  • Python后台开发Django(启动)!

    Django版本为:2.1.7 Python的web框架,MTV思想 MVC Model(模板文件,数据库操作) ...

  • Django入门

    Django简介 Django是一个开放源代码的Web应用框架,由Python写成。采用了MVC的框架模式,即模型...

网友评论

      本文标题:Python Web框架 Django - 模型关联关系、模板

      本文链接:https://www.haomeiwen.com/subject/zjdxcqtx.html