博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
django模板详解(二)
阅读量:7090 次
发布时间:2019-06-28

本文共 4278 字,大约阅读时间需要 14 分钟。

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.pyurlpatterns = [    url(r'^good/(\d+)/(\d+)/$',views.good,name='good'),]#index.html   第一页 下第二条

7 模板继承

1 作用    模板继承可以减少页面的重复,父模板base.html2 block标签    在父模版中预留区域,子模板去填充    {% block 标签名 %}3 子模板填充{% endblock 标签名 %}extends标签    继承模板,需要写在模板文件的第一行    {% extends '父模板路径' %}    {% extends 'myApp/base.html' %}   引入父模板路径#4 实例  base.html    定义父模板    
{% block main %} {% endblock main%}

{% block main2 %} {% endblock main2 %}
# main.html 定义子模板 {% entends 'myApp/base.html' %} {% block mian %}

sunck is a good man

{% endblock main %} {% block mian2%}

kaige is a good man

{% endblock main %}

8 HTML转义

HTML转义    作用将受到的字符串当成HTML代码渲染    转义        单个转义            {
{

sunck is a good man

|safe }} 多个转义 {% autoescape off %} {
{

sunck is a good man

}} {% 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 %} 
模板中去访问静态资源4. 加载静态资源模块5. src=“{% static 资源位置 %}”URL配置 r’/index/(?P
\d+)/(?P
\w+)’ re.findall(r’/index/(?P
\d+)/(?P
\w+)’,’/index/12341234/ asdfSDADH,.14387,./,') 处理函数使⽤固定位置来接收参数

转载地址:http://ahiql.baihongyu.com/

你可能感兴趣的文章
11、网络--Linux Bridge(网桥基础)
查看>>
参观迅达云成观后感
查看>>
一八年第三天晚上十点半的thinking
查看>>
swift 实践- 11 -- UISlider
查看>>
DirectX11 SDK 下载地址
查看>>
solr4.5分组查询、统计功能介绍
查看>>
Tomcat Server.xml详解
查看>>
CSS媒体查询(@media)
查看>>
如何提取一个转录本的3'UTR区域的序列
查看>>
得到当前日期前一天的零时零分零秒及当前日的零时零分零秒
查看>>
内存堆与栈的区别
查看>>
NHibernate初学者指南(12):日志
查看>>
30 个设计新颖的网站风格展示
查看>>
概念——统一资源定位符(Uniform / Universal Resource Locator,URL)
查看>>
Apache HttpComponents 获取Cookie
查看>>
彻底理解jdbc为什么用反射创建驱动程序对象
查看>>
Oracle内存管理(之五)
查看>>
[nio]dawn的基本概念
查看>>
【数据库摘要】6_Sql_Inner_Join
查看>>
交叉熵代价函数(损失函数)及其求导推导
查看>>