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,./,‘)
   处理函数使?固定位置来接收参数

原文地址:https://www.cnblogs.com/why957/p/9189877.html

时间: 2024-11-05 13:14:07

django模板templates详解(二)的相关文章

Django模板系统详解

你可能已经注意到我们在例子视图中返回文本的方式有点特别.也就是说,HTML被硬性地直接写入 Python代码之中. 这种处理会导致一些问题: § 对页面设计的进行任何改变都必须对 Python代码进行相应的修改.站点设计的修改往往比底层Python代码的修改要频繁得多,因此如果可以在不进行 Python代码修改的情况下变更设计,那将会方便得多. § Python代码编写和 HTML 设计是两项不同的工作,大多数专业的网站开发环境都将他们分配给不同的人员(甚至不同部门)来完成.设计人员和 HTML

Myeclipse Templates详解(一) —— Java模板基础

目录 Templates简介 MyEclipse自带Templates详解 新建Template 自定义Template 因为自己比较懒,尤其是对敲重复代码比较厌恶,所以经常喜欢用快捷键和模板,Myeclipse的模板功能其实很强大,好像自己只用过syso这一个,所以最近学习了一下,初次写博客,谢绝转载. 一.Templates简介 1.1 Templates基本介绍 Myeclipse模板的查看编辑入口,Window->Preferences->Java->Editor->Tem

django配置settings详解

项目根目录: 1 BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) 项目安全码: 1 SECRET_KEY = ')b)3406p#v$u4ft([email protected]*=0*w1l*=0v0ixdrey)mmcd2uf#(x' DEBUG调试: 1 DEBUG = True 不要在实际生产中打开debug 允许访问的主机: 1 ALLOWED_HOSTS = ['*'] *是代表允许所有主机

UINavigationController详解二(转)页面切换和SegmentedController

原文出自:http://blog.csdn.net/totogo2010/article/details/7682433,非常感谢. 1.RootView 跳到SecondView 首先我们需要新一个View.新建SecondView,按住Command键然后按N,弹出新建页面,我们新建SecondView 2.为Button 添加点击事件,实现跳转 在RootViewController.xib中和RootViewController.h文件建立连接 在RootViewController.m

Android 布局学习之——Layout(布局)详解二(常见布局和布局参数)

[Android布局学习系列]   1.Android 布局学习之——Layout(布局)详解一   2.Android 布局学习之——Layout(布局)详解二(常见布局和布局参数)   3.Android 布局学习之——LinearLayout的layout_weight属性   4.Android 布局学习之——LinearLayout属性baselineAligned的作用及baseline    Layout Parameters(布局参数): 在XML文件中,我们经常看到类似与lay

CSS3中的弹性流体盒模型技术详解(二)

在上一篇文章<CSS3中的弹性流体盒模型技术详解(一)>里,我给大家列出了,从css1到css3各版本中盒子模型的基本元素.本篇我会把余下的属性进行详细讲解. box-pack 作用:用来规定子元素在盒子内的水平空间分配方式 box-pack 语法:box-pack: start | end | center | justify; start 对于正常方向的框,首个子元素的左边缘吸附在盒子的左边框显示 对于相反方向的框,最后子元素的右边缘吸附在盒子的右边框显示 end 对于正常方向的框,最后子

php学习之道:WSDL详解(二)

3.定义服务使用的逻辑消息 当服务的操作被调用时,服务被定义为消息交换.在wsdl文档中,这些消息被定义message元素.这些消息由称之为part元素的部分组成. 一个服务的操作,通过指定逻辑消息的方式来定义.当操作被调用时,逻辑消息被交换.(也就是说,逻辑消息代表了服务的操作)这些逻辑消息,将在网络上传输的数据定义为xml文档.他包含了所有的参数,这些参数是方法调用的一部分.(也就是说,逻辑消息里的参数,是操作对应方法的参数集合) 消息和参数列表:每一个被服务暴露的操作能且仅能有一个输入消息

LinearLayout详解二:从其父类View说起

这个View类说来就话长了,但我们又不得不说,要说呢,就得说的彻底,要让大家看得一清二楚,明明白白.所以我们就从源代码角度来看一个view是如何被加载的吧. 如果大家不知道怎么下载android的源代码,或者说懒得去下载(因为源代码确实比较大,大概有10G)的话,教大家几个取巧的办法: 1.直接在google中输入"android view.java"即可.这种方法成功率非常高,一般android的比较重要的类都能搜到. 2.给大家提供一个人家用于放源码的的git:[email pro

discuz门户首页-header文件模板语法详解和注释

header文件引用了跟多通用模板,所以整个文章会很长,现在比较忙,注释工作会不定期进行 首先开下门户首页的文件 portal里面的index.htm <!--{template common/header}--> //引用common文件下的header.htm这个也是引用模板文件的一种常用方法 <style id="diy_style" type="text/css"></style> //没什么用 <div class