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

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

  1. Django模板过滤器详解

    Django 模板过滤器也是我们在以后基于 Django 网站开发过程中会经常遇到的,如显示格式的转换.判断处理等.以下是 Django 过滤器列表,希望对为大家的开发带来一些方便. 一.形式:小写 ...

  2. Django模板语言详解

    本节将介绍Django模版系统的语法.Django模版语言致力于在性能和简单性上取得平衡. 如果你有过其它编程背景,或者使用过一些在HTML中直接混入程序代码的语言,那么你需要记住,Django的模版 ...

  3. 第三章:模版层 - 1:Django模板语言详解

    本节将介绍Django模版系统的语法.Django模版语言致力于在性能和简单性上取得平衡. 如果你有过其它编程背景,或者使用过一些在HTML中直接混入程序代码的语言,那么你需要记住,Django的模版 ...

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

    目录 Templates简介 MyEclipse自带Templates详解 新建Template 自定义Template 因为自己比较懒,尤其是对敲重复代码比较厌恶,所以经常喜欢用快捷键和模板,Mye ...

  5. 【转】Eclipse Java注释模板设置详解

    Eclipse Java注释模板设置详解   设置注释模板的入口: Window->Preference->Java->Code Style->Code Template 然后 ...

  6. 第五篇Django URL name 详解

    Django URL name 详解 利用Django开发网站,可以设计出非常优美的url规则,如果url的匹配规则(包含正则表达式)组织得比较好,view的结构就会比较清晰,比较容易维护. Djan ...

  7. .NET DLL 保护措施详解(二)关于性能的测试

    先说结果: 加了缓存的结果与C#原生代码差异不大了 我对三种方式进行了测试: 第一种,每次调用均动态编译 第二种,缓存编译好的对象 第三种,直接调用原生C#代码 .net dll保护系列 ------ ...

  8. 【转载】 Eclipse注释模板设置详解

     Eclipse注释模板设置详解 网站推荐: 金丝燕网(主要内容是 Java 相关) 木秀林网(主要内容是消息队列)

  9. Django入门基础详解

    本次使用django版本2.1.2 安装django 安装最新版本 pip install django 安装指定版本 pip install django==1.10.1 查看本机django版本 ...

随机推荐

  1. 【算法笔记】B1032 挖掘机技术哪家强

    1032 挖掘机技术哪家强 (20 分) 为了用事实说明挖掘机技术到底哪家强,PAT 组织了一场挖掘机技能大赛.现请你根据比赛结果统计出技术最强的那个学校. 输入格式: 输入在第 1 行给出不超过 1 ...

  2. notepad++配置编译运行java

    点击插件->Plugin Manager->show plugin manager : 选择NppExec,选择install,就将这个插件下载下来了. 这个时候会重启notepad++: ...

  3. C. Connect Three Round #528 (Div. 2)【曼哈顿距离】

    一.题面 题目链接 二.分析 这题的关键是要确定一个点是从三个点出发的交汇点,其他的只要结合曼哈顿距离的定义即可明白.因为是三个点,这个交汇点的坐标分别对应的就是x,y值的中值.然后一个小技巧就是曼哈 ...

  4. hdu6437 Videos 费用流

    题目传送门 题目大意: 给出n,每天有n个小时.有m种电影,每个电影有开始时间和结束时间,和01两种种类,k个人,每一部电影只能被一个人看,会获得一个快乐值wi,如果一个人连续看两部相同种类的电影,快 ...

  5. [转] 利用CORS实现跨域请求

    [From] http://newhtml.net/using-cors/ 跨域请求一直是网页编程中的一个难题,在过去,绝大多数人都倾向于使用JSONP来解决这一问题.不过现在,我们可以考虑一下W3C ...

  6. Git本地缓存问题 修改密码后git无法拉取

    问题描述:使用正确的用户名和密码可以登录到Git代码仓库,但是在本地无法使用Git bash命令行的方式拉取代码. 问题原因:第一次使用Git bash方式拉取代码时,会根据当前的用户和密码生成一串. ...

  7. CSAPP阅读笔记-32位64位的区别--来自第三章引言的笔记--P110

    仅从寻址上看,32位和64位机器能寻址的内存空间大小不同. 需要知道的是,计算机系统对存储器作了抽象,程序“认为”内存是一个很大的字节数组,然而实际上它是由多个硬件存储器和操作系统组合起来实现的. 程 ...

  8. vue嵌套路由 && 404重定向

    第一部分: vue嵌套路由 嵌套路由是什么? 嵌套路由就是在一个被路由过来的页面下可以继续使用路由,嵌套也就是路由中的路由的意思.  比如在vue中,我们如果不使用嵌套路由,那么只有一个<rou ...

  9. zookeeper 编程框架 curator

    Curator框架提供了一套高级的API, 简化了ZooKeeper的操作. 它增加了很多使用ZooKeeper开发的特性,可以处理ZooKeeper集群复杂的连接管理和重试机制. 这些特性包括: 自 ...

  10. 018-面向接口编程的BeanFactory模板代码

    1 BeanFactory工具类 package www.test.utils; import org.dom4j.Document; import org.dom4j.Element; import ...