Django的模板系统

一、模板的组成

html代码和逻辑控制代码

二、逻辑控制代码的形式


1、变量(使用双大括号引用变量)

a、template和context

语法 :  {{ var_name }}

模板系统不仅可以传字符串,它可以传递任意对象,对于向列表、字典、元组等对象,我们可以用句点来处理,叫做深度变量的查找

eg

对应views.py

def index(request):l = [1, 2, 3]return render(request, 'index.html', locals())

 对应index.html

<body>
<h1>传递过来的列表的第一个元素是 {{ l.0 }}</h1>
</body>

浏览器返回

传递过来的列表的第一个元素是 1

b、变量的过滤器filter

语法格式 : {{ 对象|filter:参数}}

过滤器中有add、addslashes、capfirst、cut、date、default、default_if_none等

add:给变量加上相应的值

addslashes:给变量中的引号前加斜线

capfirst:首字母大写

cut:去除指定字符

date:格式化时间

。。。

如果传入的变量是一段标签,并想要实现其功能,则应给使用safe函数

eg:

不用safe函数

<body>
<h1>传递过来的列表的第一个元素是 {{ l.0 }}</h1>
这是一个{{ s }}
</body> 

浏览器输出

这是一个<a href='#'>跳转链接</a> 

使用safe函数

<body>
<h1>传递过来的列表的第一个元素是 {{ l.0 }}</h1>
这是一个{{ s|safe }}
</body>

浏览器输出

这是一个跳转链接

autoescape也可以实现同样的功能

eg

<body>
<h1>传递过来的列表的第一个元素是 {{ l.0 }}</h1>
这是一个{{ s|safe }}<br>
{% autoescape off %}这是一个{{ s }}
{% endautoescape %}
</body>

  2、标签(tag)的使用(使用大括号和百分比的组合来表示使用tag)

语法:{% tag %}

a、{% if %}的使用,做判断,有if就要有{% endif %}

eg:

{% if l.0 > 3 %}<h2>{{ l.0 }}{% else %}<h2>{{ l.2 }}
{% endif %}
</h2> 

b、{% for %}的使用,做遍历,同样有for就要有{% endfor %}

eg:

{% for num in l %}<p>{{ num }}</p>
{% endfor %} 

for循环中还内置了forloop模板变量,forloop.counter表示循环的次数,它从1开始计数,第一次循环设为1,forloop.counter0,从0开始计数,forloop.revcounter反转计数,forloop.first第一次循环时其值为True

eg:

{% for num in l %}<p>{{ forloop.counter0 }}:{{ num }}</p><p>{{ forloop.counter }}:{{ num }}</p>
{% endfor %}

c、{%csrf_token%}:csrf_token标签

当用post的方法提交表单时,django会报一个错误,这是django一个保护机制,用来防止跨站攻击

eg:

<form action="/blog/register/" method="post">姓名<input type="text" name="username"><br>密码<input type="text" name="psw"><br><input type="submit">
</form>

报错信息

Forbidden (403)

CSRF verification failed. Request aborted.

You are seeing this message because this site requires a CSRF cookie when submitting forms. This cookie is required for security reasons, to ensure that your browser is not being hijacked by third parties.

If you have configured your browser to disable cookies, please re-enable them, at least for this site, or for 'same-origin' requests.

添加后顺利提交

<form action="/blog/register/" method="post">姓名<input type="text" name="username"><br>密码<input type="text" name="psw"><br><input type="submit">{% csrf_token %}
</form>

 d、{% url %} 引用路由配置的地址

eg:

<form action="{% url 'reg' %}" method="post">姓名<input type="text" name="username"><br>密码<input type="text" name="psw"><br><input type="submit">{% csrf_token %}
</form>

req为路由配置中的别名 

e、{% verbatim %}: 禁止render,有开始就有结束{% endverbatim %}

包含在其中的代码将不被render渲染

f、{% load %}: 加载标签库

g、{% with %}:用更简单的变量名替代复杂的变量名,需要{% endwith %}

eg:

{% with s=qwer %}{{ s }}
{% endwith %}

注意:s=qwer之间不得有空格,否则报错


 3、自定义filter和simple_tag

a、在app中创建templatetags模块(必须的)

b、创建任意 .py 文件,如:mytag.py

eg:

自定义

from django import template
from django.utils.safestring import mark_saferegister = template.Library()#变量名必须时register@register.filter
def filter_mul(a, b):return a*b@register.simple_tag()
def tag_mul(a, b):return a*b

如何使用

在html文件的第一行加载{% load mytag %}即可,这里创建的文件为mytag.py

eg:

{% load mytag %}
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>BBU</title>
</head>

 

需要注意的是   filter可以用在if等语句后,simple_tag不可以


三、模板的继承

1、如果在模板中使用 {% extends %} ,必须保证其为模板中的第一个模板标记。 否则,模板继承将不起作用。

2、一般来说,基础模板中的 {% block %} 标签越多越好。 记住,子模板不必定义父模板中所有的代码块,因此你可以用合理的缺省值对一些代码块进行填充,然后只对子模板所需的代码块进行(重)定义。 俗话说,钩子越多越好

3、如果发觉自己在多个模板之间拷贝代码,你应该考虑将该代码段放置到父模板的某个 {% block %} 中。如果你需要访问父模板中的块的内容,使用 {{ block.super }}这个标签吧,这一个魔法变量将会表现出父模板中的内容。 如果只想在上级代码块基础上添加内容,而不是全部重载,该变量就显得非常有用了

4、不允许在同一个模板中定义多个同名的 {% block %} 。 存在这样的限制是因为block 标签的工作方式是双向的。也就是说,block 标签不仅挖了一个要填的坑,也定义了在父模板中这个坑所填充的内容。如果模板中出现了两个相同名称的 {% block %} 标签,父模板将无从得知要使用哪个块的内容

eg:

a、创建base.html模板

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body>
{% block base1 %}
<p>我是模板</p>
{% endblock %}
<form action="{% url 'reg' %}" method="post">姓名<input type="text" name="username"><br>密码<input type="text" name="psw"><br><input type="submit">{% csrf_token %}
</form>
</body>
</html>

b、创建子模板register.html,并利用{{ block.super }}输出父模板中代码块中的内容

{% extends 'base.html' %} #继承自base.html{% block base1 %}<p>{{ s }}</p>  #s为后端传入的变量{{ block.super }}
{% endblock %}

 

访问register.html

转载于:https://www.cnblogs.com/sumcet/p/8996723.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/368835.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java SE 7 Update 25 –发行说明进行了解释。

昨天是CPU日。 Oracle通过6月的Java重要补丁更新发布了Java SE更新25 。 在4月的最后一次重大更新之后&#xff0c;这是与所有其他Oracle产品一起不符合Oracle关键补丁更新计划的最后一个更新。 从2013年10月开始 &#xff0c;Java安全修补程序将遵循四个年度安全发布周期。 但…

Ansible: hosts文件拆分为inventory和定义inventory全局变量

前言 随着管理机器的增多&#xff0c;我们在使用Ansible的时候时常会遇到hosts文件过于冗长的问题&#xff0c;极其不便于管理&#xff0c;而将hosts文件拆分为inventory就可解决该问题&#xff1b;另外&#xff0c;hosts中的每个主机条目需要指定用户名和私钥或密码&#xff0…

Eclipse中 如何实现 多行同时编辑

在编辑的时候按下 SHIFT ALT A 之后 鼠标变为 号 选择要同时编辑几行 即可编辑&#xff08;现在eclipse好像只能是编辑一块地方 不能像vs那样 任何地方可以同时编辑 这点很鸡肋&#xff09; 如图 退出编辑 再次 按 SHIFT ALT A 即可 转载于:https://www.cnblogs.com…

检测和删除多余无用的css

本文主要讲解如何检测页面中多余无用的css。 1、chrome浏览器 F12审查元素的Audits 说明&#xff1a;使用Audits&#xff0c;会检测出页面中没有用到的css&#xff0c;需要手动删除多余的css&#xff1b;同时需要说明的是检测出多余无用的css块&#xff0c;而不是某一行css。 …

vue支付密码

从网上搜索了好多都很麻烦&#xff0c;花了点事件自己做了个&#xff0c;简单轻便&#xff0c;老少皆宜 <template> <section class"pay-mask" click"close_mask" v-show"payshow"> <div class"container"> <div…

打造智能建筑商

构建API时&#xff0c;您应该始终考虑谁将使用它。 当API简单易用时&#xff0c;用户就会感到满意。 当用户满意时&#xff0c;每个人也都会满意。 但是出色的可用性并非总是容易实现的。 有一些模式对此有所帮助&#xff0c;在这篇文章中&#xff0c;我将重点介绍经典的构建器…

结合BeautyEye开源UI框架实现的较美观的Java桌面程序

BeautyJavaSwingRobot 结合BeautyEye开源UI框架实现的较美观的Java桌面程序&#xff0c;主要功能就是图灵机器人和一个2345网站万年历的抓取。。。。   挺简单而且实用的一个项目&#xff0c;实现出来的效果也还不错。希望可以学到知识的小可爱不对应该是帅哥&#xff0c;可…

【从入门到放弃】23种设计模式(1):设计模式综述

一、设计模式的分类 总体来说设计模式分为三大类&#xff1a; 创建型模式&#xff0c;共五种&#xff1a;工厂方法模式&#xff08;Factory Method&#xff09;、抽象工厂模式&#xff08;Abstract Factory&#xff09;、单例模式&#xff08;Singleton&#xff09;、建造者模式…

【2017级面向对象程序设计】第2次成绩排行

作业地址 https://edu.cnblogs.com/campus/fzu/OOP/homework/1864 评分标准 1&#xff09; C 流程图 or 文字描述程序结构 5分C 类图 or 文字描述程序结构 5分2&#xff09; 代码 共 10 分构造函数 &#xff1a;2 分析构函数 &#xff1a;2 分成员函数 显示当前所处楼层&#x…

css定位position

闲言碎语不多说&#xff0c;直接开写&#xff01; 关于定位 我们可以使用css的position属性来设置元素定位类型&#xff0c;position的设置项如下&#xff1a; a、relative生成相对定位元素&#xff0c;元素所占据的文档流的位置不变&#xff08;即元素不会脱离文档流&#x…

php运城,运城php培训

作用域&#xff1a;全局的request恳求   描绘&#xff1a;经过在Global中完成Application_Error办法&#xff0c;来到达侦听未经处置的异常   详细代码如下&#xff1a;sudo dtrace -qFn pid$target:Finding?Ray:Finding?Ray:r{ printf("%s\n", probefunc); } …

利用爬虫模拟网页微信wechat

1.登录页面&#xff0c;显示二维码 当我们打开网页微信时&#xff0c;会看到一个用于扫码登录的二维码&#xff0c;所以我们要模拟该页面给我们的页面也弄一个二维码 通过查看网页代码我们发现&#xff0c;这个二维码的标签为 这个src属性的最后一段每次访问都是不同的&#xf…

爬取饿了么商铺信息

分析&#xff1a; 当我们访问https://www.ele.me/home/时&#xff0c;看看我们得到了什么 1.png我们发现所有的城市名称和他的经纬度&#xff0c;还有一个风流的男子 然后随机输入一些东西看看&#xff0c;进入某个地区看一看 在新的界面里我们看到了这样一条url: https://main…

linux基本命令du,Linux常用操作命令汇总

你还在为不知道Linux常用操作命令汇总而不知所措么?下面来是学习啦小编为大家收集的Linux常用操作命令汇总&#xff0c;欢迎大家阅读&#xff1a;Linux常用操作命令汇总1.ls 命令ls以默认方式显示当前目录文件列表服务器教程ls -a显示所有文件包括隐藏文件ls -l显示文件属性&a…

后处理效果栈

Unity官方的Github实现&#xff1a;Post Processing Stack Post-processing is the process of applying full-screen filters and effects to a camera’s image buffer before it is displayed to screen. It can drastically improve the visuals of your product with litt…

linux 安装tcl命令,TCL/TK Linux下安装 | 勤奋的小青蛙

原创文章&#xff0c;转载请注明&#xff1a; 转载自勤奋的小青蛙本文链接地址: TCL/TK Linux下安装在Linux下安装TCL/TK&#xff0c;可以有编译源代码的方式安装&#xff0c;也可以有直接通过二进制压缩包进行解压缩安装&#xff0c;本文采用比较快捷的方式&#xff0c;用二进…

安全性中的Spring AOP –通过方面控制UI组件的创建

以下文章将显示在我参与的一个项目中&#xff0c;我们如何使用Spring的AOP来介绍一些与安全性相关的功能。 这样的概念是为了使用户能够看到一些UI组件&#xff0c;他需要具有一定级别的安全特权。 如果不满足该要求&#xff0c;则不会显示UIComponent。 让我们看一下项目结构&…

模拟生物自然进化的基因遗传算法

基因遗传算法&#xff08;Genetic Algorithm&#xff0c;GA&#xff09;是一种通过模拟生物进化过程来寻找最优解的优化算法。它是一种常见的启发式搜索算法&#xff0c;常用于优化、搜索和机器学习等领域。 生物基因遗传 生物的基因遗传是指父母通过基因传递给子代的过程。基因…

CSS学习笔记11 CSS背景

background-color&#xff1a;背景色 前面我们经常用background-color这个属性来设置元素的背景色&#xff0c;例如下面这条css可将段落的背景色设置为灰色 p {background-color: gray;} 如果想要元素的背景色向外延伸&#xff0c;则只需增加内边距即可 background-color可以为…

linux 文件的目录,Linux文件及目录管理

第七列&#xff1a;文件或目录名。名以 . 开头表示为隐藏文件或隐藏目录2.2 修改文件目录或者权限改变文件所属用户组&#xff1a;chgrpchgrp [-R] 用户组 文件或目录 ...[-R]&#xff1a;递归修改该目录下所有文件和目录&#xff1b;改变文件所有者&#xff1a;chownchown [-R…