zoukankan      html  css  js  c++  java
  • django模板templates详解(二)

    1 总体结构

    ​ Django是MTV结构,即:Model, Template, View
    Model:定义数据的存储格式,并且提供了数据库访问的API。
    View:定义那些数据被显示,是业务逻辑处理模块。
    Template:定义数据如何被显示。
    Django工程包含工程的配置、及多个APP,每个APP完成相对独立的功能。在设计中,要尽量保持每个APP的独立性,以做到APP是即插即用。

    2 各个模块的交互关系

    ​ Django收到HTTP请求后,依次完成下列处理:
    根据URL通过URLConf模块映射到View函数,将HttpRequest对象作为参数传入。
    在View函数中,获取HTTP请求的参数,通过Model访问数据库,进行业务逻辑运算得到输出数据。
    然后,加载Template,根据输出数据生成页面,将HttpResponse对象返回。

    3 模板概述

    #模板处理过程:
    1. 模板加载
    2. 模板渲染
    #模板包含两个部分:
    3. 原始的html⻚⾯
    4. 模板语法标记的内容(标记语言)
    #模板引擎就是把模板语法标记的内容,替换成导⼊到模板引擎的数据
       render(request, 模板名称,传递给模板渲染的字典)
       render返回的是HttpResponse对象
       render的中间结果就是⼀个字符串,然后⽤该字符串创建HttpResponse对象
    

    4 定义模板

    (1)变量
    语法:{{变量名}}  {{ var }}
    字典查询{{'student':students}}
    属性与方法{{stu.sname}}
        
    (2)标签
    语法: {%tag%} 标签
    格式:if语句
    {%  if 表达式1 %}
    语句1
    {% elif表达式2 %}
    语句2
    {% endif %}  
    
    格式:for语句
    格式{% for 变量 in 列表 %}
    语句1
    {% empty %}  #当列表为空或不存在时执行语句2
    语句2
    {% endfor %}  
    
    (3)comment 多行注释
    {% comment %}
    注释内容
    {% endcomment %}    多行注释
    
    (4)ifqual/ifnotequal  判断是否相等
    作用 : 判断是否相等或者不相等
    格式 : {% ifequal 值1 值2 %} #如果值1=值2则执行
    	  {% endifequal %}
    
    (5) 其他功能
    include
    作用 : 加载模板并以标签内的参数渲染
    格式 : {% include  '模板目录'  参数1  参数2%}
        
    url作用反向解析格式 : {% url 'namespace:name'  p1 p2 %}
        
    csrf_token作用: 用于跨站请求伪造保护
    格式: {% csrf_token %}
        
    block/extends作用 : 用于模板的继承    
    autoescape: 作用用于html的转义
    

    循环forloop常见的功能:

    循环类型 说明
    {{ forloop.counter0}} 表示当前是第⼏次循环,从0数数
    {{ forloop.revcounter}} 表示当前是第⼏次循环,倒着数数,到1停
    {{ forloop.revcounter0}} 表示当前第⼏次循环,倒着数,到0停
    {{ forloop.last }} 布尔值是否是最后⼀个 布尔值
    {{ forloop.first }} 是否是第⼀个
    {{ forloop.counter }} 表示当前是第⼏次循环,从1数数
    #例子
    data={“values”:range(10)}
    {% for value in values %}
    {{value}}//forloop.count {{forloop.count}}
    {% endfor %}
    

    5 过滤器

    
    	1 语法
    		{{ var过滤器 }}
    	作用
    		在变量被显示前修改它
    			{{ str | upper}}
    
    	2 过滤器可以传递参数,参数用引号引起
    		join
    			格式
    				列表|join:'#'
    				{{list|join:'#'}}   列表数据以#号连接
    	3 如果一个变量没有被提供,或者值为false/空,可以使用默认值
    		default	
    			格式
    				{{var|default:'值'}}
    			实例
    				{{test|default:'没有'}}  没有默认显示没有
    	4 根据给定格式转换日期为字符串
    		date
    			格式
    				{{ dateVal|date:'y-m-d' }}
    	5 HTML转义
    		escape
    	6 加减乘除
    		{{num|add:10}}
    		{{num|add:-5}}
    		{% widthratio num 1 5%}}
    			计算方法num/1*5
    		{% widthratio num 2 1%}
    			计算方法num/2*1
    

    6 反向解析

    #urls.py根路由
    urlpatterns = [
    	url(r'^sunck/',include('myApp.urls',namespace='app'))
    ]
    #myApp urls.py
    urlpatterns = [
    	url(r'^good/(d+)/(d+)/$',views.good,name='good'),
    ]
    #index.html
    <a href=' '>
    <a href='{% url 'app:good' 1 2 %}'>   第一页 下第二条
    

    7 模板继承

    1 作用
    	模板继承可以减少页面的重复,父模板base.html
    2 block标签
    	在父模版中预留区域,子模板去填充
    	{% block 标签名 %}
    3 子模板填充
    {% endblock 标签名 %}
    extends标签
    	继承模板,需要写在模板文件的第一行
    	{% extends '父模板路径' %}
    	{% extends 'myApp/base.html' %}   引入父模板路径
    #4 实例  base.html    定义父模板
        <div id='main'>
            {% block main %}
            {% endblock  main%}
            <hr/>
            {% block main2 %}
            {% endblock main2 %}		
        </div>
    # main.html    定义子模板
        {% entends 'myApp/base.html' %}
    
        {% block mian %}
            <h1>sunck is a good man<h1/>
        {% endblock main %}
    
        {% block mian2%}
            <h1>kaige is a good man<h1/>
        {% endblock main %}
    

    8 HTML转义

    HTML转义
    	作用将受到的字符串当成HTML代码渲染
    	转义
    		单个转义
    			{{ <h1>sunck is a good man</h1>|safe }}
    		多个转义
    		   {% autoescape off %}
                {{<h1>sunck is a good man</h1>}}
                {% endautoescape %}
    

    9 CSRF验证

    CSRF
    	跨站请求伪造
    		防护恶意网站:链接,表单,按钮,利用登录用户在浏览器中认证从而攻击服务
    	防止CSRF
    		在settings中启用
    		表单过验证  {{crsf_token}}
    		在view.py中引入
    from django.views.decorators.csrf import csrf_exempt
    在对应的提交函数中
    添加@csrf_exempt
    
    #附中间件模块
    MIDDLEWARE = [
        'django.middleware.security.SecurityMiddleware',
        'django.contrib.sessions.middleware.SessionMiddleware',
        'django.middleware.common.CommonMiddleware',
        'django.middleware.csrf.CsrfViewMiddleware',
        'django.contrib.auth.middleware.AuthenticationMiddleware',
        'django.contrib.messages.middleware.MessageMiddleware',
        'django.middleware.clickjacking.XFrameOptionsMiddleware',
    ]
    

    10 静态资源的访问

    1. ⼯程下建⽴static⽂件夹
    2. settings⾥⾯设置
       STATICFILES_DIRS=[os.path.join(BASE_DIR,’static’)]
    3. 在模板中可以直接使⽤{% load static %} <link href=“{%
       static 资源位置 %}“>
       模板中去访问静态资源
    4. 加载静态资源模块
    5. src=“{% static 资源位置 %}”URL配置
       r’/index/(?P<page_id>d+)/(?P<anchor>w+)’
       re.findall(r’/index/(?P<page_id>d+)/(?P<anchor>w+)’,’/index/12341234/
       asdfSDADH,.14387,./,')
       处理函数使⽤固定位置来接收参数
    
  • 相关阅读:
    各国语言缩写列表,各国语言缩写-各国语言简称,世界各国域名缩写
    How to see log files in MySQL?
    git 设置和取消代理
    使用本地下载和管理的免费 Windows 10 虚拟机测试 IE11 和旧版 Microsoft Edge
    在Microsoft SQL SERVER Management Studio下如何完整输出NVARCHAR(MAX)字段或变量的内容
    windows 10 x64系统下在vmware workstation pro 15安装macOS 10.15 Catelina, 并设置分辨率为3840x2160
    在Windows 10系统下将Git项目签出到磁盘分区根目录的方法
    群晖NAS(Synology NAS)环境下安装GitLab, 并在Windows 10环境下使用Git
    使用V-2ray和V-2rayN搭建本地代理服务器供局域网用户连接
    windows 10 专业版安装VMware虚拟机碰到的坑
  • 原文地址:https://www.cnblogs.com/why957/p/9189877.html
Copyright © 2011-2022 走看看