Django之模板HTML(模板渲染(字符,列表,字典),继承母版(extends ,extends), templatetags(simple_tag,filter))【交互篇三】

上一篇:Django之view视图处理【交互篇二】点击跳转
目录篇:Django之前后端交互篇目录 点击跳转
下一篇:Django之CSRF XSS原理解析【交互篇四】点击跳转

目录

  • 各种模板渲染
  • 后端进行render
  • 前端进行渲染(字符渲染,列表渲染,字典渲染,IF判断渲染,if嵌套到for循环里面,forloop)
  • 得到的结果
  • 注意:数据类型取值和Python的区别
  • HTML继承母版(全局extends, 局部include)
  • extends
  • include
  •  templatetags(simple_tag,filter)

各种模板渲染

简单理解:来说就是后端把html里面的特殊符号{{ }}内容替换成我们给的内容,又或者你可以理解成后端给一个变量给前端使用

更深入了解跳转:web框架的本质(socket,WSGI)https://blog.csdn.net/Burgess_zheng/article/details/86496202

    后端进行render

def tem_render(request):
    current_user = 'Burgess'
    user_dict = {'k1': 'v1', 'k2': 'v2', }
    user_list = ['xiaoming', 'xiaohong']
    age = 18
    return render(request, "render.html", {'current_user': current_user,
                                              "age": age,
                                              'user_list': user_list,
                                              'user_dict': user_dict,
    })

     前端进行渲染(字符渲染,列表渲染,字典渲染,IF判断渲染,if嵌套到for循环里面,forloop)




    
    Title



--------------------字符串-------------------
{{ current_user }}
{{ current_user.0 }}
--------------------列表-------------------
{{ user_list.0 }} {{ user_list.1 }}
    {% for row in user_list %}
  • {{ row }}
  • {{ row.0 }}
  • {{ row.1 }}
  • {% endfor %}
--------------------字典-------------------
{{ user_dict.k1}} {{ user_dict.k2}}
    {% for row in user_dict %}
  • {{ row }}
  • {% endfor %} {% for row in user_dict.keys %}
  • {{ row }}
  • {% endfor %} {% for row in user_dict.values %}
  • {{ row }}
  • {% endfor %} {% for row in user_dict.items %}
  • {{ row }}
  • {% endfor %} {% for k,row in user_dict.items %}
  • {{ k }}---{{ row }}
  • {% endfor %}
--------------------if判断-------------------
{% if age %} 有年龄 {% if age > 16 %} 老男人 {% else %} 小鲜肉 {% endif %} {% else %} 无年龄 {% endif %}
--------------------IF嵌套到FOR循环里面-------------------
    {% for row in user_list %} {% if row == "xiaoming" %}
  • {{ row }}
  • {% endif %} {% endfor %}
--------------------forloop参数-------------------
    {% for row in user_list %}
    {{ forloop.counter }}
    {% endfor %}

    得到的结果

Django之模板HTML(模板渲染(字符,列表,字典),继承母版(extends ,extends), templatetags(simple_tag,filter))【交互篇三】_第1张图片

    注意:数据类型取值和Python的区别

通过模板HTML语言进行数据类型取值都是通过点
    v=obj(id,name,....)
        #对象取值方式:通过点如:v1.id
    
    v={'id':1,'caption':'运维部'}
        #字典取值方式:Python:v ["key"]、
        #模板渲染通过点如:v.id

    v= (1,2)
        #元组取值方式:Python: v[下标]
        #模板渲染:v.下标

    v=[1,2]
        #列表取值方式:Python:v[下标]
        模板渲染:v.下

 

 

HTML继承母版(全局extends, 局部include)

实战Django之继承母版(extends, include): https://blog.csdn.net/Burgess_zheng/article/details/86548311

    extends

继承全局母版
场景:多个模板的格式和部分标签相同的时候,继承相同的部分,不同的部分根据母版的block块进行替换内容

母版(在不通用的位置进行block,这样继承人可以自定制内容,继承者只能继承1次)

    master.html




    
    
        {% block title %} {% endblock %}
<!--block:母版的块title:块名:继承该母版的模板可根据该块名替换该块内容-->
    
    
    
    {% block css %} {% endblock %}



    
Bugess
{% block content %} {% endblock %} {% block js %} {% endblock %}

继承者(拥有母版的所有标签,且根据对应block位置插入自定制内容):

    successor.html

{% extends 'master.html' %}
{% block title %} {% endblock %}
{% block conent %} {% endblock %}
{% block css %} {% endblock %}
{% block js %} {% endblock %}

需注意:
1.母版的固定代码,如果被修改,那么所有的继承模板都会修改到
2.css和js还是要注意,一定要在母版的head 和body最下面专门弄个块,这样继承模板才可以写自身的css 和js
 

    include

导入局部母版
场景:标签重复被调用的时候,或者该标签代码多(为了页面的整洁)进而导入

局部内容标签(允许被导入多次)

   tag.html

xx

导入者(导入指定的文件以后,该文件的内容进入插入到include位置)




    
    Title


    {% include 'tag.html' %}

 

 templatetags(simple_tag,filter)

实战django之simple_tag and filter: https://blog.csdn.net/Burgess_zheng/article/details/86548240

     简单理解:HTML调用Python写的函数

      系统自带simple.tag     

      自定制simple.tag

        1.在某个app下创建一个templatetags目录(目录名不能更改其他的

        2. templatetags目录下创建任意py文件(py文件名没限制)

        3.py文件需要导入指定模块实例化一个template对象 (名字必须为:register = template.Library())

        4.该对象调取继承类的simple_tag方法对自定义函数进行装饰 装饰器:@register.simple_tag or @register.filter(有要求,参数固定最多2)

        5. 注册 templatetags目录所在的app

        6.模板文件调用

               1.顶部导入自定义函数文件格式:{% load 要调取的函数所在文件名 %} 

               2.simple_tag调取函数格式: simple_tag{% 函数名实参” ”实参” %}   fiter: {{”实参”|函数名:”实参”}}

上一篇:Django之view视图处理【交互篇二】点击跳转
目录篇:Django之前后端交互篇目录 点击跳转
下一篇:Django之CSRF XSS原理解析【交互篇四】点击跳转​​​​​​​

你可能感兴趣的:(Django)