zoukankan      html  css  js  c++  java
  • CSIC_716_2020107【Django入门---模板层】

    模板语法的符号就两种

    { {  } }   和变量相关 , 比如取某处传来的值。

    { %   % }    和逻辑相关,比如for循环,以及条件判断。

     

    模板语法的传值

    Python所支持数据类型,都可以从视图函数中传到前端,但注意一定要用字典的形式传递。

    传值有两种方式:

    第一种指名道姓,即手动构造一个字典传到前端。

    第二种将名称空间中的所有值(包括值和函数)构造成一个大字典传到前端,使用locals()

    在HTML页面上,可以通过后端所构造字典中的key作为变量名取值,此外变量key还可以通过句点符取索引对应的值或者取字典中键对应的value,或者取对象中的属性。

    此外,因为locals()构造的字典中也有函数和类,如果传的是函数名,会自动加括号调用,并展示函数的返回值,注意不支持有参函数;如果传的是类名 也会自动加括号实例化。


    过滤器

     过滤器是:在前端实现一些简单逻辑处理的函数。

    过滤器的语法结构

    只有一个参数时:    {{ 参数A | 关键字}}
    有两个参数时: {{ 参数a | 关键字:参数b}}

     内置的过滤器包括:

    {{xxx|length}}    xxx的长度
    {{xxx|add:yyy}}    xxx+yyy的值
    {{xxx|filesizeformat}}    xxx是文件的字节数,可通过这个转变成文件大小
    {{xxx|truncatechars:5}}    比如xxx是hello,则通过该过滤器,变成  he...   句号也要算在长度5里面
    {{xxx|truncatewords:3}}   比如xxx是 he he he he he,筛选器以空格分隔计数,会找出三个he返回
    {{xxx|date:'Y年/m月/d日'}} 比如xxx是datetime.now(),则会按:后面的格式输出。此处不支持时间戳
    {{xxx|slice:'1:10:2'}}    切片处理,可以选择步长
    {{xxx|default:'选我'}}    如果xxx对应的值是假,则展示‘选我’
    {{xxx|safe}}    如果xxx是个标签,过滤器设置safe后,就会认可后端传来的标签,直接渲染
    

      

    我们注意到:  {{xxx|safe}} 如果xxx是个标签,过滤器设置safe后,就会认可后端传来的标签,直接渲染

     说明,后端可以直接写前端代码。后端也可以直接处理,让前端不用做任何处理:

     


    标签

     标签为了在前端完成一些特殊功能

    语法: {% 标签名 %},

     主要熟悉三个标签  for  if   with 

    for标签中自带有有forloop,forloop中有记录当前循环是否是第一次forloop.first ,值是布尔型、循环是否是最后一次forloop.last。

    for循环中可以嵌套if条件判断

    for循环中还可以设置{% empty %}来应对 用于for循环的可迭代对象为空时,展示的内容

     当取值表达式很长的时候,可以通过with标签取别名,以便于使用,但是应注意别名的生效空间仅限于with标签内。


    自定义过滤器、标签、    inclusion_tag

     准备工作三部曲:在app应用中新建一个文件夹,必须叫 templatetags

     在templatetags文件夹中新建一个py文件,文件名称任意,比如叫mine.py

    在上述py文件中导入 from django.template import Library    然后生成Library的的对象register        register = Library( )     

    自定义过滤器的的基本语法:

    ******************mine.py文件中**************
    @register.filter(name = 'myfilter')
    def index(a,b):     # 最多两个参数,不允许超过2个参数!!!
        return a+b
    
    
    ********************前端页面中*****************
    
    {% load mine %}      # 先加载文件
    {{ xxx| myfilter: yyy}}   #过滤器的名字就是上面name的值
    

      

    自定义标签的基本语法:

    ******************mine.py文件中****************
    @register.simple_tag(name = 'mytag')
    def index(x,y,z):  # 参数不受限制
        return x+y+z
    
    *********************前端页面中*****************
    {%   load mine  %}     # 先加载文件
    {%    mytag    1    2    3    %}    # 先放自定义标签的name   空格隔开,依次传参,参数也用空格隔开
    

      

    自定义标签不能在if 和for循环中使用,   但是自定义过滤器就可以在if 和for 循环中使用

    自定义inclusion_tag 基本语法:  

    inclusion_tag 的作用就是在使用inclusion_tag的地方引入inclusion_tag定义时绑定的html页面

    ***********************mine.py**********************
    @register.inclusion_tag('xxx,html', name='myinclusion')
    def index(n):
        #代码段
        list1 = []
        for i in n:
            list1.append(i)
    
        return locals()     # 注意这里return的值是给xxx.html界面的,一定要保证是个字典
    
    
    
    
    
    ****************与inclusion_tag绑定的xxx.html***********这里不要标准的HTML页面
    在这里面,只要针对传来的参数进行处理,不需要完整的html页面
    对 绑定的inclusion_tag传来的参数进行处理,和正常页面一样处理
    
    {{ 变量 }}   {% 标签 %}  都可以使用
    
    
    
    
    *************************前端页面***************************
    {%  load mine  %}    # 加载文件
    {%  myinclusion   5 %}     # 调用和自定义标签类似   空格隔开各个参数
    

      


    模板的继承

     在被当成模板的HTML文件的代码中,使用block标签打标记并命名

    *****************father.html***************
    < % block content1 % > # 用content1作为此处标记的名字 此处是被打上标记的前端代码(模板页面) < % endblock % >

      

    在继承的HTML页面中,导入父模板,并对打标签的部分进行修改

    **********************sun.html********************** 注意这个页面中不需要标准的HTML文件的格式
    {% extends  'father.html'%}
    {% block   content1%}   # 找到content1标记的位置
    此处可以做一些适应性的调整,和父类模板有所区别
    {% block.super %} # 通过这个语句,可以调用父类中的原来的样式,可以重复调用 {% endblock %}
    {% block.super %}  # 通过这个语句,可以调用父类中的原来的样式,可以重复调用

     

     

     模板的block块越多 可扩展性越高

    	通常情况下 模板页面页面应该起码有三块区域
    
    			{% block css %}	
    		       模板页面css内容
    			{% endblock %}
    
    			{% block content %}	
    			  模板页面常规内容
    			{% endblock %}
    {% block js %}   模板页面js内容 {% endblock %}

      



    模板的导入

    将一部分常用的重用概率较高的 html代码(局部样式)存入HTML文件中(beauty.html),备用。此处HTML文件并不是一个标准的文件,里面仅有一些组件。

    {% include  'beauty.html' %}
    

     在标准HTML页面中个的某个部位,可以通过上述语句导入使用频率较高的html代码

  • 相关阅读:
    source命令
    [电脑配置]屏幕扩展过,找不到界面
    [SAS]方便查询Tips
    [Excel]方便查询Tips
    [SAS]运用函数等的一些问题
    [SAS]错误整理
    [SAS]易错例子之数值型转字符型
    [R]Precedence
    [sas]Missing Value
    [SAS]
  • 原文地址:https://www.cnblogs.com/csic716/p/12163284.html
Copyright © 2011-2022 走看看