首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Django之Template介绍及日常应用

Django之Template介绍及日常应用

作者头像
菲宇
发布于 2022-12-21 10:46:35
发布于 2022-12-21 10:46:35
1.5K00
代码可运行
举报
文章被收录于专栏:菲宇菲宇
运行总次数:0
代码可运行

Django模板语言

Django模板是一个简单的文本文档,或用Django模板语言标记的一个Python字符串。 某些结构是被模板引擎解释和识别的。主要的有变量和标签。模板是由context来进行渲染的。渲染的过程是用在context中找到的值来替换模板中相应的变量,并执行相关tags。其他的一切都原样输出。Django模板语言的语法包括四个结构。

Django 项目可以配置一个或多个模板引擎(甚至是零,如果你不需要使用模板)。Django 的模板系统自带内建的后台 —— 称为Django 模板语言(DTL),以及另外一种流行的Jinja2。其他的模板语言的后端,可查找第三方库。

配置

模板引擎通过TEMPLATES 设置来配置。它是一个设置选项列表,与引擎一一对应。默认的值为空。由startproject 命令生成的settings.py  定义了一些有用的值:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [],
        'APP_DIRS': True,
        'OPTIONS': {
            # ... some options here ...
        },
    },
 ]

加载模板

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
get_template('news/story_detail.html')

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 {{ var_name }}

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{% load staticfiles %}

3 过滤器(filter)的使用

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{{ ship_date|date:"Fj,Y"}}
  • ship_date变量传给data过滤器,data过滤器通过使用Fj,Y这几个参数来格式化数据。|代表类似Unix命令中的管道操作。

 常用标签(tag)

1 {% if %}

  • 可以使用and,or,not来组织你的逻辑,但不允许and和or同时出现的条件语句中。新版本已经支持{% elif %}这样的用法

2 {% ifequal %}{% ifnotequal %}

  • 比较是否相等,只限于简单的类型,比如字符串、整数、小数的比较,列表、字典、元组不支持。

3 {% for %}

  • 用来循环一个list,还可以使用reserved关键字来进行倒序遍历,一般可以用if语句来西先判断一下列表是否为空,在进行遍历;还可以使用empty关键字来进行为空时候的跳转。
  • **for标签中可以使用forloop
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
forloop.counter: 当前循环计数,从1开始
forloop.counter0: 当前循环计数,从0开始
forloop.recounter: 当前循环倒数计数,从列表长度开始
forloop.recounter0: 当前循环倒数计数,从列表长度减1开始,标准
forloop.first: bool值,判断是不是循环的第一个元素
forloop.last: bool值,判断是不是循环的最后一个元素
forloop.parentloop: 用在嵌套循环中,得到parent循环的引用,然后可以使用以上参数

4 {% cycle %}

  • 在循环是轮流使用给定的字符串列表中的值。

5 注释

  • {# #}单行注释,{% comment %}多行注释

6 {% csrf_token %}

  • 生成csrf_token的标签,用于防止跨站攻击验证

7 {% debug %}

  • 调用调试信息

8 {% filter %}

  • 将filter标签标签圈定的执行过滤器操作

9 {% autoescape %}

  • 自动转义设置
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{{% autoescape off %}}
{{ value}}
{{% endautoescape %}}

10 {% firstof %}

  • 输出第一个值不等于False的变量

11 {% load %}

  • 加载标签库

12 {% now %}

  • 获取当前的时间

13 {% spaceless %}

  • 移除空格

14 {% url %}

  • 引入路由配置的地址

15 {% verbatim %}

  • 禁止render

16 {% with %}

  • 用更简单的变量名缓存复制的变量名

常用过滤器(filter)

  • 经常使用的是通过变量来调用过滤器)

1 add

  • 给变量加上相应的值
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 {{ value|add:"2" }}     # 空格不要乱加

2 addslashes

  • 给变量中的引号(双引号、单引号)前加上斜线

3 capfirst

  • 首字母大写

4 cut

  • 从字符串中移除指定的字符
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 {{ value|cut:" " }}

5 date

  • 格式化日期字符串

6 default

  • 如果值是False,就替换成设置的默认值,否则就使用本来的值(空字符串”“、空列表[]、空字典{}、空元组()、None在python里也是False)

7 default_if_none

  • 如果只是None,就替换成设置的默认值,否则就使用本来的值

8 dictsort

  • 按照设定的参数(key)对应的value对列表进行排序

9 dictsorted

  • 和上面恰好相反

10 divisbleby

  • 是否能够被某个数字整除,是的话返回True,否则返回False

11 escape

  • 对字符串进行转义。django默认自动转义,如果我们关闭了自动转义,这可使用escape过滤器来转义。

12 escapejs

  • 替换value中的某些字符,以适应JAVASCRIPT和JSON格式

13 filesizeformat

  • 格式化文件大小显示

14 first

  • 返回列表中的第一个值

15 last

  • 返回列表中的最后一个值

16 floatformat

  • 格式化浮点数

17 length

  • 求字符串或者列表的长度

18 length_is

  • 比较字符串或者列表的长度

19 urlencode

  • 对URL进行编码处理

20 upper\lower

  • 大写\小写

21 safe

  • 对某个变量关闭自动转义
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{{ value|safe }}

22 slice

  • 切片操作
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{{ some_list|slice:":2" }}

23 time

  • 格式化时间

24 timesince

  • 格式化时间(e.g. “4 days,6 hours”)

25 truncatechars

  • 按照字符截取字符串
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{{ value|truncatechars:5 }}

26 turncatewords

  • 按照单词截取字符串(其实就是按照空格来截取)

27 striptags

  • 过滤掉html标签

具体可以查看 内置过滤器参考开发自定义过滤器指南这两篇文档.

include模板

{% include 'included.html' %}标签允许在模板中包含其它的模板的内容。

模板继承

模板可以通过继承来实现复用。首先编写base.html

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<html>
  <head>
    <title>Hello World!</title>
  </head>

  <body>
    {% block mainbody %}
       <p>base</p>
    {% endblock %}
  </body>
</html>

{% block %}标签通知模板引擎,子模板可以重写这些部分。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{% extends "base.html" %}

{% block mainbody %}
    <p>extends base</p>
{% endblock %}

模版继承可以让您创建一个基本的“骨架”模版,它包含您站点中的全部元素,并且可以定义能够被子模版覆盖的 blocks 。

加载器

模板加载器负责定位模板,加载它们,并返回模板对象.

Django提供几个内置的模板加载器并且支持自定义的模板加载器.

上下文处理器

Context处理器是这样的函数:接收当前的 HttpRequest 作为参数,并返回一个 字典,该字典中包含了将要添加到渲染的context中的数据。

它们的主要用途是添加所有的模板context共享的公共数据,而不需要在每个视图中重复代码。

Django提供了很多 内置的context处理器 . 实现自定义context处理器很简单,只要定义一个函数。

大家使用Django的模板的时候可能都用过{{request.user}}来获取登录的用户或者判断是否登录呢?那大家有没有想过,我们调用render方法的时候并没有把request对象作为参数传给模板啊,为什么就可以直接调用呢?答案就是Django默认自带了一些context_processors帮我们把request对象传给模板,我们来看一下settings.py这一段代码

代码语言:javascript
代码运行次数:0
运行
复制
  1. TEMPLATES = [
  2. {
  3. 'BACKEND': 'django.template.backends.django.DjangoTemplates',
  4. 'DIRS': [os.path.join(BASE_DIR, 'templates')]
  5. ,
  6. 'APP_DIRS': True,
  7. 'OPTIONS': {
  8. 'context_processors': [
  9. 'django.template.context_processors.debug',
  10. 'django.template.context_processors.request',
  11. 'django.contrib.auth.context_processors.auth',
  12. 'django.contrib.messages.context_processors.messages',
  13. ],
  14. },
  15. },
  16. ]

这里面的context_processors就是配置模板有哪些context_processors可以使用。其中django.template.context_processors.request就是帮我们把request传递给模板的,我们来看一下

def request(request):

  1. return {'request': request}

可以看到,首先context_processors就是一个函数,其次,这个函数默认接受一个参数,也就是request,最后,返回的对象是一个字典,字典的key就是我们在模板里面可以调用的一个上下文。

那么我们来建一个自己的context_processors

创建context_processors

首先我们在自己app里创建一个context_processors.py的文件(模块),文件名虽然不是强制要求,但作为规范,建议还是按照规范来

然后里面实现一个context_processors的函数,比如我们就是把settings里的某一个参数作为上下文返回,可以这样写

  1. from django.conf import settings # import the settings file
  2. def site_name(request):
  3. # return the value you want as a dictionnary. you may add multiple values in there.
  4. return {'SITE_NAME': settings.SITE_NAME}

说明:settings.SITE_NAME是一个自定义的配置,默认并不存在,需要我们手动写。另外可以返回多个值,只要配置多个key和value对儿就可以了。 注意:request形参必须有,尽管多数用不到。

配置context_processors

接下来就可以把我们自定义的context_processors添加到配置文件中

TEMPLATES = [

  1. 接下来就可以把我们自定义的context_processors添加到配置文件中
  2. TEMPLATES = [
  3. {
  4. ...
  5. 'OPTIONS': {
  6. 说明:blog是这个例子的应用名,根据自己的项目做相应修改。 注意:别忘了配置SITE_NAME哦。 大功告成 这样我们就可以在我们的模板通过{{SITE_NAME}}等方式调用这个参数了
  7. 'context_processors': [
  8. ...
  9. 'blog.context_processors.site_name',
  10. ],
  11. },
  12. },
  13. ]
  14. ...
  15. SITE_NAME = "社区"
  16. {
  17. ...
  18. 'OPTIONS': {
  19. 'context_processors': [
  20. ...
  21. 'blog.context_processors.site_name',
  22. ],
  23. },
  24. },
  25. ]
  26. ...
  27. SITE_NAME = "社区"

说明:blog是这个例子的应用名,根据自己的项目做相应修改。 注意:别忘了配置SITE_NAME哦。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018-04-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
CentOS6编译安装HTTP2.4
准备安装包三个: 下载地址 [root@centos7 ]#mkdir httpd2.4//创建httpd2.4目录 [root@centos7 src]#mv *.bz2 httpd2.4/ //把下载的安装包放到httpd2.4里面 [root@centos7 httpd2.4]#ls apr-1.6.3.tar.bz2 httpd-2.4.29.tar.bz2 apr-util-1.6.1.tar.bz2 安装开发包组 [root@centos7
咻一咻
2020/05/29
3540
编译安装LAMP(基于模块方式)
具体安装请参见MariaDB的二进制格式安装和CentOS 6上编译安装httpd-2.4两篇文章,此处不再赘述。
用户1456517
2019/03/05
6890
编译安装LAMP(基于模块方式)
CentOS 7.4基于LAMP环境安装WordPress博客
WordPress是使用PHP语言开发的博客平台,用户可以在支持PHP和MYSQL数据库的服务器上架设属于自己的网站。也可以把WordPress当作一个内容管理系统(CMS)来使用。
子润先生
2021/06/29
5880
LAMP环境自动化安装脚本
3、如果想一个一个的安装LAMP架构,请注意安装顺序:Apache–>MYSQL–>PHP
用户8449980
2021/07/12
4560
LAMP环境搭建与配置
LAMP是Linux  Apache  MySQL  PHP的缩写,即把Apache、MySQL以及PHP安装在Linux系统上,组成一个环境来运行PHP的脚本语言。Apache是最常用的Web服务软件,而MySQL是比较小型的数据库软件。三个角色可以安装在一台机器上,也可以分开(但httpd和php要在一起的)
星哥玩云
2022/07/24
1.1K0
LAMP环境搭建与配置
听说Memcache你很豪横?-------------深入剖析Memcache 安装及管理数据库操作
Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载。它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态、数据库驱动网站的速度。Memcached基于一个存储键/值对的hashmap。其守护进程(daemon )是用C写的,但是客户端可以用任何语言来编写,并通过memcached协议与守护进程通信。
不吃小白菜
2020/09/15
6730
CentOS 6.2下以源代码方式安装LAMP
相关附件 百度云盘下载:http://pan.baidu.com/s/12JCku
星哥玩云
2022/07/04
3530
CentOS 6.2下以源代码方式安装LAMP
Lamp架构_lamp服务器
所谓lamp,其实就是由Linux+Apache+Mysql/MariaDB+Php/Perl/Python的一组动态网站或者服务器的开源软件,除Linux外其它各部件本身都是各自独立的程序,但是因为经常被放在一起使用,拥有了越来越高的兼容度,共同组成了一个强大的Web应用程序平台。
全栈程序员站长
2022/11/02
1.3K0
lamp平台 php解析器基于模块和php-fpm
首先,我先介绍一下实验环境: http服务器:192.168.236.128(php解析器基于modules) mysql服务器:192.168.236.129 编译和配置http服务器,http版本是2.4以上的。 由于http依赖于apr apr-util这两个包,但是我们系统上的rpm包版本比较低,我们也需要下载这两个源码包来编译,解决依赖关系。 还要一些开发包组,所以,这一些都要在编译时做好!! yum groupinstall Desktop Platform Development Serve
小小科
2018/05/03
1.4K0
lamp平台 php解析器基于模块和php-fpm
linux学习第三十六篇:MariaDB安装,Apache安装
MariaDB安装 将待会下载的源码包放到这个目录下: cd /usr/local/src 下载源码包: wget https://downloads.mariadb.com/MariaDB/mariadb-10.2.6/bintar-linux-glibc_214-x86_64/mariadb-10.2.6-linux-glibc_214-x86_64.tar.gz 将压缩包解压: tar zxvf mariadb-10.2.6-linux-glibc_214-x86_64.tar.gz 把
用户1215343
2018/02/05
7290
linux学习第三十六篇:MariaDB安装,Apache安装
LAMP环境搭建WordPress自动化安装脚本
此脚本是LAMP环境安装WordPress脚本,有需要朋友可以参考,脚本内容如下:
子润先生
2021/07/06
4040
Linux基础(day40)
11.6 MariaDB安装 安装mariadb cd /usr/local/src wget https://downloads.mariadb.com/MariaDB/mariadb-10.2.6/bintar-linux-glibc_214-x86_64/mariadb-10.2.6-linux-glibc_214-x86_64.tar.gz tar zxvf mariadb-10.2.6-linux-glibc_214-x86_64.tar.gz mv mariadb-10.2.6-linux-gl
运维小白
2018/02/06
1.4K0
Lamp架构_公司网络架构与配置
LAMP架构是目前成熟的企业网站应用模式之一,指的是协同工作的一整台系统和相关软件,能够提供动态web站点服务及其应用开发环境
全栈程序员站长
2022/11/02
8070
手把手教你,嘴对嘴传达 ----源码编译安装部署LAMP平台(LAMP平台与编译安装详解,Apache,MySQL与PHP源码编译安装,LAMP平台搭建论坛)
Linux操作系统之所以能够在十余年的时间里发展壮大以至于风靡全球,其开放源代码的特性是很重要的原因之一,及Linux操作系统中包括内核在内的所有软件都可以获得源代码,并且可以经过定制修改后编译安装。
不吃小白菜
2020/09/03
1.2K0
手把手教你,嘴对嘴传达 ----源码编译安装部署LAMP平台(LAMP平台与编译安装详解,Apache,MySQL与PHP源码编译安装,LAMP平台搭建论坛)
Centos编译安装 LAMP (apache-2.4.7 + mysql-5.5.35 + php 5.5.8)+ Redis
  wget apache.dataguru.cn/httpd/httpd-2.4.7.tar.gz
黄啊码
2020/05/29
6720
CentOS 7.4下源码编译安装配置LAMP环境详解
CentOS 7.4搭建LAMP,LAMP:Linux、Apache、MySQL、PHP。
星哥玩云
2022/07/12
1.6K0
CentOS 7.4下源码编译安装配置LAMP环境详解
LAMP 架构介绍及环境搭建
那么web服务器如何执行程序并将结果返回给客户端呢?下面通过一张图来说明一下web服务器如何处理客户端的请求
Alone-林
2022/09/28
1.1K0
LAMP 架构介绍及环境搭建
在Centos 5.2下编译安装LAMP
首先使用Virtualbox安装一台CentOS 5.2的虚拟机,网络连接采用 Host-only Adapter,这样主客机之间可以互相访问,但是客机不能够上广域网。
大江小浪
2018/07/25
6900
LAMP搭建和配置
LAMP是由Linux, Apache, MySQL, PHP组成的,即把Apache、MySQL以及PHP安装在Linux系统上,组成一个环境来运行PHP的脚本语言。Apache是最常用的Web服务软件,而MySQL是比较小型的数据库软件。三个角色可以安装在一台机器上,也可以分开(但httpd和php要在一起的)
全栈程序员站长
2022/08/24
6850
LAMP搭建和配置
11.7/11.8/11.9 Apache安装
安装Apache Apache是一个基金会的名字,httpd才是我们要安装的软件包,早期它的名字就叫apache Apache官网www.apache.org wget http://mirrors.cnnic.cn/apache/httpd/httpd-2.4.29.tar.gz wget http://mirrors.cnnic.cn/apache/apr/apr-1.6.3.tar.gz wget http://mirrors.cnnic.cn/apache/apr/apr-util-1.6.1.ta
运维小白
2018/02/06
1.5K0
推荐阅读
相关推荐
CentOS6编译安装HTTP2.4
更多 >
LV.1
运维开发运维开发
目录
  • 配置
  • 1 变量(使用双大括号来引用变量)
  • 2 标签(tag)的使用(使用大括号和百分号组成来表示使用tag)
  • 3 过滤器(filter)的使用
  •  常用标签(tag)
    • 1 {% if %}
    • 2 {% ifequal %}和{% ifnotequal %}
    • 3 {% for %}
    • 4 {% cycle %}
    • 5 注释
    • 6 {% csrf_token %}
    • 7 {% debug %}
    • 8 {% filter %}
    • 9 {% autoescape %}
    • 10 {% firstof %}
    • 11 {% load %}
    • 12 {% now %}
    • 13 {% spaceless %}
    • 14 {% url %}
    • 15 {% verbatim %}
    • 16 {% with %}
  • 常用过滤器(filter)
    • 1 add
    • 2 addslashes
    • 3 capfirst
    • 4 cut
    • 5 date
    • 6 default
    • 7 default_if_none
    • 8 dictsort
    • 9 dictsorted
    • 10 divisbleby
    • 11 escape
    • 12 escapejs
    • 13 filesizeformat
    • 14 first
    • 15 last
    • 16 floatformat
    • 17 length
    • 18 length_is
    • 19 urlencode
    • 20 upper\lower
    • 21 safe
    • 22 slice
    • 23 time
    • 24 timesince
    • 25 truncatechars
    • 26 turncatewords
    • 27 striptags
  • include模板
  • 模板继承
    • 创建context_processors
    • 配置context_processors
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档