zoukankan      html  css  js  c++  java
  • django模板层

    模板层(模板语法)

    1.过滤器

    2.标签

    3.自定义标签,过滤器,inclusion_tag

    4.模板的继承

    5.模板的导入

    后端向前端传递数据有两种方式:

    区别:第一种传值方式是以字典的传值方式,精确地去传某一个对象,第二种传值方式是把函数中所有的对象传到前端

    #第一种

    return render(request, 'index.httml', {'n': n})

    #第二种

    return render(request, 'index.html', locals())



    后端传对象到前端,会自动加括号调用,但是不支持传参
    后端传对象到前端,就相当于打印了这个对象,打印出来是一个名称空间的内存地址,走了类中的__str__方法


    前端获取后端传过来的容器类型的内部元素,统一用句点符(.)
    ('a','b','c','d')>>>: {{t}},{{t.1}}    #数字对应的就是数据的索引
    一、过滤器
    前端统计字符串的长度,s要在后端定义
    <p>{{s|length}}</p>
    
    

    前端获取数据如果是空就返回default后面默认的参数值

    <p>{{flag|default:'你这个东西为空'}}</p>

    将数字格式化成代表文件大小的单位:

    <p>{{file_size|filesizeformat}}</p>

    未格式化时间写法

    <p>{{ctime}}</p>

    格式化时间(不要加%)

    <p>{{ctime|date:'Y-m-d'}}</p>

    字符串的切片操作

    <p>{{res|slice:'0:8'}}</p>

    截取空格截取文本内容

    <p>{{s|truncatechars:4}}</p>

    按照空格截取文本内容

    <p>{{s|truncatewords:4}}</p>

    取消转义:告诉被传的地方说我这个标签是安全的(重点)

    如果要把   st='<h1>我是h1'  标签</h1>这个渲染到前端,并且让它以h1的格式输出出来,name要在前端这样写,

    <p>{{st|safe}}</p>

    前端转义 |safe

    后端转义 ,使用mark_safe把代码包起来

    from django.utils.safestring import mark_safe
    xxx = mark_safe(<h1>我是h1标签</h1>)

    二、标签

    后端定义:l = ['a', 'b', 'c', 'd','e', 'f', 'g']

    forloop

    for循环
                {% for foo in l %}
                    <p>{{ foo }}</p>
                    <p>{{ forloop }}</p>
                {% endfor %}

    if判断

    {% if flag %}
                    <p>flag不为空</p>
                    {% else %}
                    <p>flag是空</p>
                {% endif %}
    嵌套使用
    嵌套使用
                {% for foo in l %}
                    {% if forloop.first %}
                        <p>这是我的第一次</p>
                    {% elif forloop.last %}
                        <p>这是最后一次了啊</p>
                    {% else %}
                        <p>嗨起来!!!</p>
                    {% endif %}
                {% endfor %}
                 empty

    for循环如果时候空的时候会自动走empty代码块的内容

                {% for foo in l %}
                    {% if forloop.first %}
                        <p>这是我的第一次</p>
                    {% elif forloop.last %}
                        <p>这是最后一次了啊</p>
                    {% else %}
                        <p>嗨起来!!!</p>
                    {% endif %}
                    {% empty %}
                        <p>你给我的容器类型是个空啊,没法for循环</p>
                {% endfor %}        

    三、自定义过滤器、标签、inclusion_tag

    自定义有三点需要注意(必须写这三步才能自定义):

    1.在应用名下新建一个为templatetags文件夹(必须叫这个名字)

    2.在该新建的文件夹内新建一个任意名称的py文件

    3.在该py文件中需要固定写下面两句代码

    from django import template

    register = template.Library()

    自定义过滤器

    后端

    n=10

    @register.filter(name='XBB') def index(a,b)   return a+b

    前端

    {%load my_tag%}
    {{n|XBB:8}}

    自定义标签

    后端

    @register.simple_tag(name='bbb')
    def plus(a,b,c)
    
      return a+b+c

    前端

    {% plus 1 2 3%}

    过滤器最多支持两个参数,而标签可以支持多个参数

    自定义inclusion_tag

    把结果丢给login.html,,再由login.html将渲染好的数据丢给调用方


    @register.inclusion_tag('login.html',name='login') def login(n): # l = [] # for i in range(n): # l.append('第%s项'%i) l = [ '第%s项'%i for i in range(n)] return {'l':l} # login.html <ul> {% for foo in l %} <li>{{ foo }}</li> {% endfor %} </ul> # 调用 {% login 5 %}

    注意:要想使用自定义的过滤器、标签、inclusion_sion ,必须现在需要使用的html界面加载你的py文件 {% load my_tag %}

    四、模板的继承与导入

    模板的继承与导入
    首先需要在被继承的模板中划分多个区域
    {% block 给区域起的名字 %}
    
    {% endblock %}
    通常情况下一个模板中应该至少有三块
    {% block css %}
        页面css代码块
    {% endblock %}
    {% block js %}
        页面js代码块
    {% endblock %}
    {% block content %}
        页面主体内容
    {% endblock %}
    子板继承模板
    先继承模板所有的内容
    {% extends 'home.html' %}
    然后根据block块的名字修改指定区域的内容
    {% block content %}
        <h1>登录页面</h1>
            <form action="">
                <p>username:<input type="text" class="form-control"></p>
                <p>password:<input type="text" class="form-control"></p>
                <input type="submit" class="btn btn-success">
            </form>
    {% endblock %}
    模板的导入:将一段html当做模块的方式导入到另一个html展示
    {% include '想导入的html文件名' %}

    静态文件的配置

    先引用
    {% load static %}  

    支持两种写法

    <link rel='stylesheet' href="{% static 'css/mycss.css'%}">  # 第一种方式
    <link rel='stylesheet' href="{% get_static_prefix %}css/mycss.css">  # 第二种方式
     
     
     
  • 相关阅读:
    前端常见跨域解决方案
    VS单元测试--初级篇
    高等数学思路
    二元函数求极值判别式AC-B^2
    向量积详解
    伯努利分布均值和方差
    两个标准正态随机变量相乘的方差
    a分位数与双侧a分位数
    中心极限定理概念理解与记忆
    样本方差概念解析
  • 原文地址:https://www.cnblogs.com/chengzige/p/11007067.html
Copyright © 2011-2022 走看看