• django 实战篇之模板层


    模板层

    {{}} 变量相关

    {%%} 逻辑相关

    前端获取容器类型的数据统一使用 句点符(.)

    两种给模板传递值的方式 return render(request,'index.html',{'name':'jason','age':'18'})

    return render(request, 'index.html', locals()) # 这个方法虽然好用,但是会把后端函数所有的变量传给前端

    过滤器

    取消转义(**): 前端: |safe 取消转义

    后端: from django.utils.safestring import mark_safe

    ss1 = mark_safe("<h1>我是h1</h1>")

    标签

    {% for foo in l %} <!--l = [1,2,3,4,5,6,7,8]-->

    <p>{{ foo }}</p>

    {% endfor %}

    {% if l %}
    <p>这个l有值</p>
    {% else %}
    <p>这个l没有值</p>
    {% endif %}

    {% for foo in l %} <!--l = [1,2,3,4,5,6,7,8]-->
    {% if forloop.first %}
    <p>这是我的第一次</p>
    {% elif forloop.last %}
    <p>最后一次了啊,不能再来了</p>
    {% else %}
    <p>继续嗨!</p>
    {% endif %}
    {% empty %}
    <p>你给我的这个l是个空的,我没办法for循环</p>
    {% endfor %}

    {% with d.hobby.2 as h %}

    {{ h }} # 重命名的变量只能在with里面使用

    {# {{ d.hobby.2 }}#}

    {% endwith %}

     

     

    自定义过滤器
    必须做下面三件事:
    1.必须在应用下新建一个名为templatetags的文件夹
    2.在该文件夹下创建一个任意名的py文件
    3.在该文件内必须先写下面两句话
    from django import template
    resgiter = tmplate.Library()


    # 自定义过滤器
    @register.filter(name='baby')
    def my_sum(a,b):
    return a+b
    使用:
    必须先加载过来
    {% load my_tag %}
    之后的用法跟自带的过滤器用法相同
    {{ xx|baby:10 }}

    自定义inclusion_tag 调用自定义的inclusion_tag能够返回一段html代码

    @register.inclusion_tag('login.html')

    def get_html(n): l = []

    for i in range(n):

    l.append('第%s项'%i)

    return {'l':l}

    login.html 中文件

    <!DOCTYPE html>
    <html lang="en">
    <head>
    <meta charset="UTF-8">
    <title>Title</title>
    </head>
    <body>
    <ul>
    {% for foo in l %}
    <li>{{ foo }}</li>
    {% endfor %}

    </ul>
    </body>
    </html>

    最后在index.HTML中执行下面的方法
    {% get_html 5 %}
    得到五条记录
    第0项
    第1项
    第2项
    第3项
    第4项

    自定义标签 过滤器 inclusion_tag都是为了能够调用它返回相应的结果
    区别:
    自定义标签和过滤器返回的仅仅是数据而已
    而我的inclusion_tag返回的是一段html代码而已!!!

    模板的继承与导入 模板的继承:

    需要在你的主页面通过block划定多片区域,给继承了主页面的子页面选择使用哪块区域

    子页面中如何使用: {% extends 'home.html' %} # 先将主页面继承过来 通过block块的名字,指定修改哪一片区域 {% block '区域名字' %}

     {% endblock %}

    {% block content %} <h1>登录页面</h1> {{ block.super }}

    <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-danger pull-right">

    </form>

    {% endblock %}

    在模板中指定一片区域命名为content

    还可以通过{{ block.super }}继续使用主页面某一个块里面的内容

    模板里面定义的块儿越多,可扩展性越高 通常情况下模板都有三块区域

    {% block css %}

    {% endblock %}

    {% block content %}

    {% endblock %}

    {% block js %}

    {% endblock %}

    模板的导入的应用场景

    你花了好长时间搭建了一个特别好看的form表单(某一个区域)

    使用方式: {% include 'demo.html' %} 相当于一个模块 可以导入

  • 相关阅读:
    vue-cli之加载ico文件
    arcgisJs之featureLayer中feature的获取
    浏览器兼容设置
    global.css
    sass之mixin的全局引入(vue3.0)
    arcgis之隐藏设置放大缩小按钮
    vue之scoped穿透
    关闭google默认打开翻译提醒
    ...args剩余参数用法
    js之向div contenteditable光标位置添加字符
  • 原文地址:https://www.cnblogs.com/tangda/p/10719703.html
Copyright © 2020-2023  润新知