• Django MTV之templas


    模板

    1. 模板的功能

    产生html,控制页面上展示的内容。但是模板文件不仅仅是一个html文件。

    模板文件包含两部分内容:

    1) 静态内容:css,js,html。

    2) 动态内容:动态去产生一些网页内容。通过模板语言来产生。

    2. 模板文件的使用

    render渲染过程:

    通常是在视图函数中使用模板产生html内容返回给客户端。

    from django.template import Template,Context

    a) 从html文件获取到的模板文件的内容,传给Template类,实例化一个template对象

    b) 然后把数据传递给Context类,实例出一个Context上下文 对象。

    c) 然后用 template对象.render(Context对象) 的render方法模板渲染产生html页面内容 ,将传递的数据替换相应的变量,产生一个替换后的标准的html内容,最后返回给web。

    这就是render函数所封装的过程,而我们在使用时,我们只需要调用render(request, 'index.html' ,locals())得到渲染后的html最后return返回给web  用户端就可以看到渲染后完整的和html了。

     

    3. 模板文件加载顺序

    1) 首先去配置的模板目录下面去找模板文件。

    2) INSTALLED_APPS下面的每个应用的templates去找模板文件,前提是应用中必须有templates文件夹。

     

    2. 模板语言

    模板语言简称为DTL。(Django Template Language)

    4.1 模板变量

    模板变量名是由数字,字母,下划线和点组成的,不能以下划线开头。

    使用模板变量:{{ 模板变量名 }}

    模板变量的取值通过句点符  .   (对象去点) 来完成:

    例如:{{ book.btitle }}    通过 对象.属性 取值

    1) 首先把book当成一个字典,把btitle当成键名,进行取值book['btitle']

    2) book当成一个对象,把btitle当成属性,进行取值book.btitle

    3) book当成一个对象,把btitle当成对象的方法,进行取值book.btitle

    例如:{{book.0}}    通过  对象.索引  取值

    1) 首先把book当成一个字典,把0当成键名,进行取值book[0]

    2) book当成一个列表,把0当成下标,进行取值book[0]

    如果解析失败,则产生内容时用空字符串填充模板变量。

    使用模板变量时,.前面的可能是一个字典,可能是一个对象,还可能是一个列表。

    4.2 模板标签

    {% 代码段 %}

    for循环:

    {% for x in 列表 %}

    # 列表不为空时执行

    {% empty %}

    # 列表为空时执行

    {% endfor %}

    可以通过{{ forloop.counter }}得到for循环遍历到了第几次。

    {% if 条件 %}

    {% elif 条件 %}

    {% else %}

    {% endif %}

    关系比较操作符:> < >= <= == !=

    注意:进行比较操作时,比较操作符两边必须有空格。

    逻辑运算:not and or

    4.3 过滤器

    语法格式: {{ obj|filter:param }}

         {{ 模板变量|过滤器:参数 }}

    过滤器用于对模板变量进行操作,但只能传一个参数。

    add : 对其做加法操作。

    date:改变日期的显示格式。

    length:求长度。字符串,列表。

    capfirst: 首字母大写。

    addslashes : 给变量中的引号加斜线。

    default:假如值为false,就替换成设置的默认值。

    default_if_none :假如值为none,则替换成参数的值

     

    自定义过滤器。

    自定义的过滤器函数,至少有一个参数,最多两个

    参考资料:(模板标签和内置过滤器)

    https://docs.djangoproject.com/zh-hans/2.2/howto/custom-template-tags/

    4.4 模板注释

    单行注释:  {# 注释内容 #}

    多行注释:  {% comment %}

            注释内容

           {% endcomment %}

    3. 模板继承

    模板继承也是为了重用html页面内容,减少代码量,使代码更简洁优美。

     继承格式:{% extends 父模板文件路径 %} 

    在父模板里可以定义块,使用标签:

    {% block 块名 %}

    块中间可以写内容,也可以不写

    {% endblock 块名%}

    子模板去继承父模板之后,可以重写父模板中的某一块的内容。

    {% block 块名 %}

    {{ block.super}} #获取父模板中块的默认内容

    重写的内容

    {% endblock 块名%}

    若还需要引入其他的html ,则需要使用include

    格式:{% include  其他html文件的路径 %}

    {% iclude 'test.html' %}

    4. html转义

    编辑商品详情信息,数据表中保存的是html内容。

    在模板上下文中html标记默认是会被转义的。

    小于号< 转换为<

    大于号> 转换为>

    单引号' 转换为'

    双引号" 转换为 "

    与符号& 转换为 &

    要关闭模板上下文字符串的转义:可以使用 {{ 模板变量|safe }}

    也可以使用:

    {% autoescape off %}

    模板语言代码

    {% endautoescape %}

    模板硬编码中的字符串默认不会经过转义,如果需要转义,那需要手动进行转义。

    5. csrf攻击

    csrf攻击概念:https://baike.baidu.com/item/CSRF/2735433?fr=aladdin

    django防止csrf的方式:

    1) 默认打开csrf中间件。

    2) 表单post提交数据时加上{% csrf_token %}标签。

    防御原理:

    1) 渲染模板文件时在页面生成一个名字叫做csrfmiddlewaretoken的隐藏域。

    2) 服务器交给浏览器保存一个名字为csrftokencookie信息。

    3) 提交表单时,两个值都会发给服务器,服务器进行比对,如果一样,则csrf验证通过,否则失败。

    6. 验证码

    在用户注册、登录页面,为了防止暴力请求,可以加入验证码功能,如果验证码错误,则不需要继续处理,可以减轻业务服务器、数据库服务器的压力。

     

    7.静态文件

    在网页请求的过程中,我们不光是请求html文件,还要请求css   js  image 文件。

    html可以是静态的,也可以是动态生成的,而css   js  image  文件是静态的,所以我们叫静态文件。

    1)新建静态文件夹static,然后创建css,js,image 子目录。

    2)在 setting.py 中配置静态文件所在的物理目录。

    STATIC_URL='static'  #请求时的静态目录名
    
    STATICFILES_DIR = [os.path.join(BASE_DIR,'static')] #实际的物理目录,绝对路径

    3)在html文件中动态生成静态路径

    {% load staticfiles %}

    然后再标签属性中写src='{% static 'static' %}'

    这样    就可以动态生成静态路径了,在web访问的适合就会通过这个静态路径找到对应的静态文件再渲染出来。

  • 相关阅读:
    ODBC连接数据库
    发送邮件
    动态控制某些字段可以修改
    动态调用SQL和存储过程
    写数据到TXT文档
    动态创建Form
    动态调用报表
    ICE学习笔记2:摸了这么些天,终于有点着道了
    如何使用 Symbol Retriever
    Win XP注册表之性能优化
  • 原文地址:https://www.cnblogs.com/zc3614/p/11692445.html
Copyright © 2020-2023  润新知