django之模板的导入和继承,单表操作,静态文件

一,模板的导入

把需要导入的那一部分代码写到新的html文件下面,在导入的那个位置写({% include '文件名' %})即可

下面是总文档

<!DOCTYPE html>
<html lang="zh">
<head>
    <meta charset="UTF-8">
    <title>tamplate</title>
    <link rel="stylesheet" href="../static/bootstrap-3.3.7-dist/css/bootstrap.css">
    <style>
        h1 {
            text-align: center;
        }
    </style>
</head>
<body>
    <div class="container-fluid">
        <div class="row">
            <div class="head">
                <div class="page-header">
                  <h1>正页的标题<small>副标题</small></h1>
                </div>
            </div>
            {% include 'template2.html' %}
            <div class="col-md-9">
            </div>
        </div>
    </div>
</body>
</html>

下面是需要导入的那部分代码

<div class="col-md-3">
    <div class="panel panel-primary">
        <div class="panel-body">
            弃医从文
        </div>
        <div class="panel-footer">弃医从文</div>
    </div>
    <div class="panel panel-success">
        <div class="panel-body">
            狂人不狂
        </div>
        <div class="panel-footer">狂人不狂</div>
    </div>
    <div class="panel panel-info">
        <div class="panel-body">
            狂人不狂
        </div>
        <div class="panel-footer">狂人不狂</div>
    </div>
    <div class="panel panel-warning">
        <div class="panel-body">
            淋漓尽致
        </div>
        <div class="panel-footer">淋漓尽致</div>
    </div>
    <div class="panel panel-danger">
        <div class="panel-body">
            一针见血
        </div>
        <div class="panel-footer">一针见血</div>
    </div>
</div>

二,模板的继承

写一个母版,留一个可以扩展的盒子,在子模板中对盒子进行设置

下面是母版

<!DOCTYPE html>
<html lang="zh">
<head>
    <meta charset="UTF-8">
    <title>tamplate</title>
    <link rel="stylesheet" href="../static/bootstrap-3.3.7-dist/css/bootstrap.css">
    <style>
        h1 {
            text-align: center;
        }
    </style>
</head>
<body>
    <div class="container-fluid">
        <div class="row">
            <div class="head">
                <div class="page-header">
                  <h1>正页的标题<small>副标题</small></h1>
                </div>
            </div>
            {% include 'template2.html' %}
            <div class="col-md-9">
                <div class="right_top" style="height: 100px;background: #5bc0de">
                {#这是给后面继承此页面的东西添加一个可以操控的盒子#}
                    {% block content_top %}
                    {% endblock %}
                </div>
                <div class="right_middle" style="height: 200px; background: #5cb85c">

                </div>
                {#一个页面可以设置多个操控的盒子#}
                {% block content %}
                {% endblock %}
            </div>
        </div>
    </div>
</body>
</html>

下面是对母版的继承

{#直接继承base.html文件中的布局 #}
{% extends 'base.html' %}

{# 设置布局中,content盒子,这里添加内容 #}
{% block content %}
    <p>这是9的区域</p>
    <p>这是9的区域</p>
{# 这是把父级这个盒子里面存在的内容继承过来,可以继承多次,没继承一次,出现一次内容 #}
    {{ block.super }}
    <p>这是9的区域</p>
    <p>这是9的区域</p>
    <p>这是9的区域</p>
    <p>这是9的区域</p>
    {{ block.super }}
{% endblock content%}


{# 一个页面可以设置多个盒子,多个盒子的可操控的可能就多了 #}
{% block content_top %}
    我是模版一内容頭部
{% endblock content_top%}

三,静态文件相关的导入

可以有三种方法,1,直接把路径写死了,2,经过传参进行路径的拼接3,经过一个内置函数,得到静态文件的地址,然后对地址进行拼接

1,写死的静态文件
<link rel="stylesheet" href="/static/css/mycss.css">
2,使用static标签函数:
-{%load static%}
#static返回值,会拼上传参的路径
-{% static "传参"%}
3,使用get_static_prefix标签获取静态文件的路径
-{%load static%}
#get_static_prefix返回值是:静态文件的地址,相当于/static/
-{% get_static_prefix %}css/mycss.css
	

四,单表操作:
1,数据迁移命令:

python3 manage.py makemigrations--->只是对变化做一个记录,记录文件在app的migrations

python3 manage.py migrate---->把更改提交到数据库

python3 manage.py showmigrations----->查询哪个没有提交到数据库

django框架中,也可以直接写一个Py文件进行右击执行,在主目录下面创建一个Py文件然后里面加入

import os

if __name__ == '__main__':
    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "day76orm.settings")
    import django

    django.setup()

    from app01 import models

 

import os

if __name__ == '__main__':
    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "work.settings")
    import django

    django.setup()
    from app1 import models

    # 新增的两种方式
    # 1,返回的结果是一个对象
    # book = models.Book.objects.create(name='西游记', price=76, publish='人民出版社', author='曹雪芹', create_data='2018-09-17')
    # print(book.name)
    # book = models.Book(name='红楼梦', price=56, publish='清华大学出版社', author='曹雪芹', create_data='2018-06-04')
    # book.save()
    # print(book.name)
    # 时间格式可以传字符串,也可以传时间格式
    # import datetime
    # ctime = datetime.datetime.now()
    # book = models.Book.objects.create(name='水浒传', price=76, publish='人民出版社', author='施耐庵', create_data=ctime)
    # print(book.name)
    # 删除叫西游记的这本书(可以不加first,加上表示只删除第一个,不加则叫西游记的书全部删除)
    # ret = models.Book.objects.filter(name='西游记').first().delete()
    # print(ret)   # 返回值有两个值,第一个是影响的行数,第二个是删除的对象
    # 下面把西游记这本书的作者改了,有两种方法1,直接Update更改,2,先搜寻出来然后在更改,改完必须保存
    # ret = models.Book.objects.filter(name='西游记').update(author='吴承恩')
    # print(ret)   # 返回值是更改的个数
    # ret = models.Book.objects.filter(name='西游记').first()
    # ret.price = 23.8
    # ret.save()
    # 接下来是查询,查询的方法需要记忆的内容比较多,同时也是比较重要的内容
    # all()查询所有结果,返回值是把所有对象查出来,然后放到一个queryset对象里面去
    # ret = models.Book.objects.all()
    # print(ret)
    # filter()寻找满足括号里面条件的值,里面可以传多个参数,用逗号分隔,他们之间是and的关系,
    # 而且搜寻出来的结果可能是一个列表,然后通过方括号取值,不支持负号取值
    # ret = models.Book.objects.filter(name='西游记')[0]
    # print(ret)  # 输出的值是models中__str__的返回值.本身是一个对象,不具有.方法
    # ret.query -->queryset对象打印sql(就是把其中内部的代码打出来)
    # get() 有且只有一个值的时候才可以使用,如果只有一个值(多个值时会报错),则返回的是一个对象而不是queryset对象,一般用在id的查询
    # ret = models.Book.objects.get(id=2)
    # print(ret)
    # exclude()查询的是不满足括号里面的所有值,如果是多个条件的话,每个条件之间的and并且直接取反
    # ret = models.Book.objects.exclude(name='西游记')
    # order_by 按价格升序排列(如果加负号,则是降序排列)
    # ret=models.Book.objects.all().order_by('price')
    # print(ret)
    # queryset对象可以继续 点 方法取出名字叫西游记并且升序排列
    # ret=models.Book.objects.all().order_by('price').filter(name='西游记')
    # print(ret)
    # reverse()经过排序过的对象可以使用这个对其进行反序排列
    # ret = models.Book.objects.all().order_by('-price').reverse()
    # print(ret)
    # count  查询结果个数
    # ret=models.Book.objects.all().filter(name='西游记').count()
    # print(ret)
    # last 返回book对象(查找结果中最后一个值)
    # ret=models.Book.objects.all().last()
    # 查询的结构是否存在,返回的结果是布尔值
    # print(ret)objects.filter(name='三国演义').exists()
    # print(ret)
    # values(*field): queryset对象里套字典(字典里面存在的内容)
    # ret=models.Book.objects.all().values('name','price')
    # ret=models.Book.objects.all().values('name')
    # print(ret)
    # value_list queryset对象里套元组
    # ret=models.Book.objects.all().values_list('name','price')
    # print(ret)
    # distinct() 必须完全一样,才能去重(把括号里面重复的内容只显示一个)   只要带了id,去重就没有意义了
    # ret=models.Book.objects.all().values('name').distinct()
    # print(ret)
    # =========基于双下划线的模糊查询
    # 查询价格大于89 的书
    # ret=models.Book.objects.filter(price__gt='89')
    # print(ret)
    # 查询价格小于89 的书
    # ret=models.Book.objects.filter(price__lt='89')
    # print(ret)

    # ret=models.Book.objects.filter(price__lt='89',price='89')
    # 小于等于
    # ret=models.Book.objects.filter(price__lte='89')
    # 大于等于,
    # ret = models.Book.objects.filter(price__gte='89')
    # print(ret)
    # in 在XX中
    # ret=models.Book.objects.filter(price__in=['23.8','89','100'])
    # print(ret)
    # print(ret.query)
    # range 在XX范围内 between and
    # ret=models.Book.objects.filter(price__range=[50,100])
    # print(ret.query)
    # contains  查询名字有'%红%'的书
    # ret=models.Book.objects.filter(name__contains='红')
    # print(ret)
    # print(ret.query)
    # icontains 查询名字带p的书,忽略大小写
    # ret=models.Book.objects.filter(name__icontains='P')
    # print(ret)
    # print(ret.query)
    #     startswith  以XX开头
    # ret=models.Book.objects.filter(name__startswith='红')
    # print(ret)
    # print(ret.query)
    # endswith  以XX结尾
    # ret=models.Book.objects.filter(name__endswith='梦')
    # print(ret)

    # pub_date__year 按年查询
    # ret=models.Book.objects.filter(create_data__year='2017')
    # print(ret)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值