zoukankan      html  css  js  c++  java
  • Django 模板渲染

    模板语言

      {{ 变量 }}

      {% 逻辑 %}


    {{ 变量 }}

    {{ 变量 }}中的点号

      用于取出字典/列表等类型数据的值

      {{ list.2 }} 获取列表list中索引为2的值

      {{ dict.name }} 获取字典中name的值

    {{ 变量 }}内置的过滤器

      以|分隔

      {{ a|safe }}  于django输出前,要求不对字符进行转义。自动转义关闭时自动失效

      {{ time|date:'Y-m-d H:i:s' }}  格式化输出时间  年月日时分秒

      {{ list|join:',' }}  相当于 ‘,’.join(list)

      {{ str|truncatechars:8 }}  显示内容为5个字符与3个点号 共8个字符

      {{ str|truncatechars:8 }}  同上 显示单位为单词 按空格辨别

      {{ str|length }}  str的长度

      {{ list|slice:'0-2' }}  切片索引0-2不含2

      {{ var|default:'xxx' }}  为var设置默认值为‘xxx’

      {{ str|lower }}{{ str|upper }}  输出显示为小/大写

      {{ int|filesizeformat }}  转为内存大小单位 类似于2GB 1TB

    {% 逻辑 %}

      for循环

    <ul>
        {% for student_name in name %}
            <li>{{ student_name }}</li>
       {% empty %} //若name为空则于此结束并打印None
       <li>None</li>
    {% endfor %} //正常结束for循环
    </ul>

      if 条件判断语句

        {% if num > 100 %} //比较运算符两边必须留下空格才可以识别
        <p>大于100</p>
        {% elif num == 200 %}
        <p>等于100</p>
        {% else %}
        <p>小于100</p>
        {% endif %}

      csrf_token

    防御跨站请求伪造,这个标签用于跨站请求伪造保护

        <form action='/main_h/' method="post">
            {% csrf_token %}  //写在form表单内
            <input type="text" name="usm">
            <input type="password" name="pwd">
            <input type="submit">
        </form>

    装饰器的形式实现防御跨站请求伪造

    from django.views.decorators.csrf import csrf_exempt,csrf_protect
    # 于views.py文件中导入
    csrf_exempt,csrf_protect
    @csrf_protect # 强制放行csrf认证,即便全局配置了csrf认
    def main_h(request):
      return render(request,'main_h.html')
    @csrf_exempt # 强制进行csrf认证,即便全局没有配置csrf认证
    def dome(request):
      return render(request,'dome.html')

    模板继承

    1 创建一个模板.html文件,
    
    2 {% extends '模板.html' %}
    
    3 模板.html  {% block content %} xxxxxxx{% endblock %} 还可以指定名字{% endblock content%}
    
    4 继承模板的文件里面 {% block content %} 自己html里面的内容{% endblock %}
    
    5 保留模板内容的写法 {% block content %} {{ block.super }}自己html里面的内容{% endblock %}

    模板
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
        <style>
            div{
                float: left;
                width: 20%;
            }
        </style>
    </head>
    <body>
    <h1>Welcome</h1>
    {% block head %}
    <h1 style="background: antiquewhite">这是模板的大概率应用部分</h1>
    {% endblock %}
    # 设置可修改内容
    <div> <p>标题一</p> <p>标题二</p> <p>标题三</p> </div>
    {% block name %} <span>主页</span> {% endblock %}
    # 设置可修改内容
    </body> </html>

      继承

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
    {% extends "main_h.html" %}
    # 继承模板HTML文件
    {% block head %} {{ block.super }} {% endblock %}
    # 继承延用内容
    {% block name %} 分页1 {% endblock %}
    # 继承修改内容
    </body> </html>

    组件

    将一个完整功能模块,放到一个hmtl文件中,使用这个模块的其他页面,直接在页面中引入即可,
    引入方式{% include '模块.html' %} ,任意位置引入
    ps:(仅引入body内容)

    组件HTML
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
        <style>
            h1{
                width: 100%;
                height: 5%;
                background: aqua;
            }
        </style>
    </head>
    <body>
    <h1>这是组件内容</h1>
    </body>
    </html>

    引入组件 {% include 'xxx.html' %}

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
    
    {% include 'h1_h.html' %} //引入组件 ps:(与模板冲突,只会显示模板而不显示组件)
    
    </body>
    </html>
     

    自定义标签与过滤器

    1 app应用文件夹中创建一个叫做templatetags的文件夹
    2 创建一个py文件,例如:mytag.py
    3 mytag.py,
    	from django import template
    	register = template.Library()  #register变量必须是这个名字
    	过滤器:
    	@register.filter
    	def xxx(): 参数最多两个
        	return 'xxx'
    	标签:
    	@register.simple_tag
    	def sss(): 参数可以多个
        	return 'xxx'
    	
    	标签:
    	@register.inclusion_tag('html文件')
    	def aaa(): 参数可以多个
        	return {'xx':'xxxxx'}
        	
    html文件中的使用
    <h1>
    {#    {{ num|xxx:'11,23,33'}}#}
        {{ num|xxx:20 }}
        {% if num|xxx:20 > 2000 %}
        <h2>大于2千</h2>
        {% else %}
            <h2>小于等于2千</h2>
        {% endif %}
    
    </h1>
    
    <h1>
        {% sss num 10 15 %}
    </h1>
    
    <h1>
        {% aaa  %}
    </h1>
    pydiango1app01 emplatetagsmytag.py文件下
    from django import template
    from django.utils.safestring import mark_safe
    register=template.Library()
    
    @register.simple_tag
    def sum_max(a,b,c,d):
        num=a*b*c*d
        return num
    # 自定义标签 可接收多个参数
    
    @register.filter
    def num_20(num1,num2):
        num1*=num2
        return num1
    # 自定义过滤器 最多接收2个参数

    HTML文件下

    <!DOCTYPE html>
    <html lang="en">
    
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
    
    {% load mytag %}  //引入mytag.py文件
    {% include 'h1_h.html' %} 
    {% sum_max 7 8 9 10 %}
    
    <p>{{ num|num_20:2 }}</p>
    </body>
    </html>
     
  • 相关阅读:
    swift 第十四课 可视化view: @IBDesignable 、@IBInspectable
    swift 第十三课 GCD 的介绍和使用
    swift 第十二课 as 的使用方法
    swift 第十一课 结构体定义model类
    swift 第十课 cocopod 网络请求 Alamofire
    swift 第九课 用tableview 做一个下拉菜单Menu
    swift 第八课 CollectView的 添加 footerView 、headerView
    swift 第七课 xib 约束的优先级
    swift 第六课 scrollview xib 的使用
    swift 第五课 定义model类 和 导航栏隐藏返回标题
  • 原文地址:https://www.cnblogs.com/lttlpp61007188/p/10902726.html
Copyright © 2011-2022 走看看