• 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>
     
  • 相关阅读:
    【PAT Advanced Level】1008. Elevator (20)
    模块的耦合和内聚
    《深入理解计算机系统》--链接
    HDU 1077Catching Fish(简单计算几何)
    [置顶] VC++界面编程之--自定义CEdit(编辑框)皮肤
    使用VS2012 开发SharePoint 2013 声明式的action(activity) 综合实例
    java 创建线程的三种方法Callable,Runnable,Thread比较及用法
    代码审计技巧讲解
    IP地址后面斜杠加具体数字详解
    80端口被system进程占用解决方法
  • 原文地址:https://www.cnblogs.com/lttlpp61007188/p/10902726.html
Copyright © 2020-2023  润新知