django框架模板

模板

    • 模板介绍
      • 模板
        • 目前市面上有非常多的模板系统,其中最知名最好用的就是DTL和Jinja2。DTL是Django Template Language三个单词的缩写,也就是Django自带的模板语言。当然也可以配置Django支持Jinja2等其他模板引擎,但是作为Django内置的模板语言,和Django可以达到无缝衔接而不会产生一些不兼容的情况。
      • DTL与普通的HTML文件的区别
        • DTL模板是一种带有特殊语法的HTML文件,这个HTML文件可以被Django编译,可以传递参数进去,实现数据动态化。在编译完成后,生成一个普通的HTML文件,然后发送给客户端。
      • 渲染模板
        • render_to_string
          • 找到模板,然后将模板编译后渲染成Python的字符串格式。最后再通过HttpResponse类包装成一个HttpResponse对象返回回去。
            from django.template.loader import render_to_string from django.http import HttpResponse def book_detail(request,book_id): html = render_to_string("detail.html") return HttpResponse(html)​
        • render
          • 将模板渲染成字符串和包装成HttpResponse对象一步到位完成。
            from django.shortcuts import render def book_list(request): return render(request,'list.html')
      • 模板查找路径配置
        在项目的settings.py文件中。有一个TEMPLATES配置,这个配置包含了模板引擎的配置,模板查找路径的配置,模板上下文的配置等。模板路径可以在两个地方配置。
        • DIRS
          • 这是一个列表,在这个列表中可以存放所有的模板路径,以后在视图中使用render或者render_to_string渲染模板的时候,会在这个列表的路径中查找模板。
        • APP_DIRS
          • 默认为True,这个设置为True后,会在INSTALLED_APPS的安装了的APP下的templates文件加中查找模板。
          • 优先级
            • DIRS>APP
            • 没有抛出一个TemplateDoesNotExist的异常。
    • 模板变量
      • 变量
        • 模板中可以包含变量,
          • Django在渲染模板的时候,可以传递变量对应的值过去进行替换。
          • 变量的命名规范和Python非常类似
            • 只能是阿拉伯数字和英文字符以及下划线的组合,不能出现标点符号等特殊字符。
          • 变量需要通过视图函数渲染,视图函数在使用render或者render_to_string的时候可以传递一个context的参数
            • 这个参数是一个字典类型。以后在模板中的变量就从这个字典中读取值的
              profile.html模板代码<p>{{ username }}</p># views.py代码def profile(request): return render(request,'profile.html',context={'username':'huangyong'})
        • 模板中的变量同样也支持点(.)的形式。
          不能通过中括号的形式访问字典和列表中的值,比如dict['key']和list[1]是不支持的!
          • 字典
            • 查找这个字典的username这个key对应的值。
          • 对象
            • 查找这个对象的username属性,或者是username这个方法。
          • .1
            • 一个列表或者元组或者任意的可以通过下标访问的对象,如果是的话就取这个列表的第1个值。
            • 如果不是就获取到的是一个空的字符串。
    • 模板标签
      • if
        • if相当于python中的if语句
        • 使用方法
          • {%if%}
          • {%else%}
          • {%endif%}
        • 判断运算符
          • ==、!=、<、<=、>、>=、in、not in、is、is not等
      • for
        • 相当于python中的for循环
        • 使用方法
          • {%for %}
          • {%endfor%}
          • 快捷键
            • for Tab
          • 如果要反向遍历在最后加reverrsed
        • DTL变量
          • forloop.counter
            • 当前循环的下标。以1作为起始值。
          • forloop.counter0
            • 当前循环的下标。以0作为起始值。
          • forloop.revcounter
            • 当前循环的反向下标值,以1作为最后一个元素的下标。
          • forloop.revcounter0
            • 当前循环的反向下标值,以0作为最后一个元素的下标。
          • forloop.first
            • 是否是第一次遍历。
          • forloop.last
            • 是否是最后一次遍历
      • empty
        • 在没有值得情况下
          • 返回empty后的提示语
      • with
        • 模板中定义变量
        • 使用方法
          • {% with lisi=persons.1 %} 或 {% with persons.1 as lisi %}
          • {% endwith %}
      • url
        • 模板中url写法
        • 使用方法
          • {% url 'name'%}
          • 传参
            • {% url 'name' xxx=1%}
    • 过滤器
      • 在模板中对数据进行处理使用
        • {{ value|filter_name:'str'}}
        • 不能有空格
      • 常用过滤器
        • add
          • 将值和参数转换成整形然后进行相加。
        • cut
          • 移除值中所有指定的字符串。
        • date
          • 将一个日期按照指定的格式,格式化成字符串。
          • 时间格式化格式
            • Y
              • 四位数字的年份
            • m
              • 两位数字的月份
            • n
              • 月份,1-9前面没有0前缀
            • d
              • 两位数字的天
            • j
              • 天,但是1-9前面没有0前缀
            • g
              • 小时,12小时格式的,1-9前面没有0前缀
            • h
              • 小时,12小时格式的,1-9前面有0前缀
            • G
              • 小时,24小时格式的,1-9前面没有0前缀
            • H
              • 小时,24小时格式的,1-9前面有0前缀
            • i
              • 分钟,1-9前面有0前缀
            • s
              • 秒,1-9前面有0前缀
        • default
          • 如果值被评估为False。
            • 使用default过滤器提供的默认值。
        • default_if_none
          • 如果值是None
            • 使用default_if_none提供的默认值。
            • 只有这个值是等于None的时候才会使用默认值。
        • first
          • 返回列表/元组/字符串中的第一个元素。
        • last
          • 返回列表/元组/字符串中的最后一个元素。
        • floatformat
          • 使用四舍五入的方式格式化一个浮点类型。
            • 如果没有传递参数
              • 在小数点后保留一个小数
            • 如果传递参数
              • 就保留几位
        • join
          • 将列表/元组/字符串用指定的字符进行拼接
        • length
          • 获取一个列表/元组/字符串/字典的长度
        • lower
          • 将值中所有的字符全部转换成小写
        • upper
          • 将值中所有的字符全部转换成大写
        • random
          • 在被给的列表/字符串/元组中随机的选择一个值
        • safe
          • 标记一个字符串是安全的。也即会关掉这个字符串的自动转义
        • slice
          • 切片操作
        • striptags
          • 删除字符串中所有的html标签
        • truncatechars
          • 对字符串进行切割,并且会拼接三个点来作为省略号
    • 自定义过滤器
      • 步骤
        • 在项目目录下创一个文件夹
          • templatetags 固定的名称
        • 在templatetags目录下建一个py文件用于写代码
          • 导入模块
            • from django.template import Library-
          • 定义过滤器函数
          • 将过滤器函数注册进去django项目
        • 导入过滤器的py文件
          • {%load filters_name%}
        • 使用方法与过滤器使用方法一致
    • 模板结构优化
      • 引入模板
        • 有些代码在许多模板中都用的到,我们把这些代码抽取出来,进行引入,避免重复。
        • include
          • {% include '模板名' %}
          • 默认include标签包含模版,会自动的使用主模版中的上下文,也即可以自动的使用主模版中的变量。如果想传入一些其他的参数,那么可以使用with语句。
      • 模板继承
        • 模版继承类似于Python中的类,在父类中可以先定义好一些变量和方法,然后在子类中实现。
          • 模版继承也可以在父模版中先定义好一些子模版需要用到的代码,然后子模版直接继承就可以了。并且因为子模版肯定有自己的不同代码,因此可以在父模版中定义一个block接口,然后子模版再去实现。
        • {% extends "模板名" %}
          • extends标签必须放在模版的第一行。
        • block接口
          • 子模版中的代码必须放在block中
          • {{block.super}}
            • 在某个block中需要使用父模版的内容,那么可以使用{{block.super}}来继承。
          • {% block xxx %} {% endblock xxx %}
    • 加载静态文件
      • css样式文件,js执行文件和图片在DTL中加载。
        • 使用static标签
      • 加载静态文件步骤
        • 首先确保django.contrib.staticfiles已经添加到settings.INSTALLED_APPS中。
        • 确保在settings.py中设置了STATIC_URL。
        • 在已经安装了的app下创建一个文件夹叫做static。
        • 如果有一些静态文件是不和任何app挂钩的。那么可以在settings.py中添加STATICFILES_DIRS。
          • STATICFILES_DIRS = [ os.path.join(BASE_DIR,"static") ]
        • 在模版中使用load标签加载static标签。
          • {% load static %}
          • {% static '文件路径' %}
        • 不在模板中使用load标签调用,在settings中添加builtins"
          • 在settings.py中的TEMPLATES/OPTIONS
          • 添加'builtins':['django.templatetags.static']
      • 手动将静态文件的url与静态文件的路径进行映射
        • from django.conf import settings
          • from . import settings
        • from django.conf.urls.static import static
        • urlpatterns = [ # 其他的url映射 ] + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
posted @ 2020-05-19 09:16  一文g  阅读(254)  评论(0编辑  收藏  举报