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,./,')
       处理函数使⽤固定位置来接收参数
    
  • 相关阅读:
    简单介绍ps切片工具切图技巧
    ps选区工具应用
    【Photoshop基本概念知识】
    jQuery上传插件Uploadify使用详解
    PS非主流头发效果
    C#正则表达式整理备忘
    C#中利用正则表达式实现字符串搜索
    PS快捷键大全
    PS操作速查
    Photoshop CS2 菜单入门介绍
  • 原文地址:https://www.cnblogs.com/why957/p/9189877.html
Copyright © 2011-2022 走看看