Django学习Day6——模版的使用(三)

Django中模版的使用

上一篇博客介绍了Django中模版的内置过滤器以及自定义过滤器的使用方法,这一篇博客介绍除了Django内置模版引擎外,我们还可以选择的其他模版引擎,可以在实际应用中,根据开发的场景选择不同的模版引擎,以提高开发的效率。这里主要介绍两种使用比较广泛的Django模版引擎,Jinja2和Mako。

 Jinja2:

Jinja2是一套模仿Django模版的模版引擎,由flask开发者开发,它的使用场景和使用方式Django的模版非常相似。它速度快,被广泛使用。Jinja2提倡让html设计者和后端python开发工作分离。文档位置:http://jinja.pocoo.org/docs/2.10/。

Mako:

Mako模板算是Python里面比较出色的一个模板了,它宣称有比Jinja2更快的解析速度以及更多的语法支持。最大的特点在于,它可以允许你在html中随意书写python代码。

Jinja2模版引擎

下面介绍Jinja2模版引擎的配置和使用方法。

安装

首先安装Jinja2的扩展库

配置

(1)在应用目录下创建jinja2_env.py,设定环境变量。

(2)在项目的配置中进行如下三项更改(settings.py):

使用

下面通过简单的示例展示,如何使用Jinja2模版引擎。

(1)创建简单的视图函数如下(app/views.py):

(2)创建简单的模版文件如下(templates/test_jinja2.html):

(3)视图函数和路由进行绑定(app/urls.py和test_jinja/urls.py):

(4)启动服务,浏览器中进行访问:

由上面的步骤可以看出,Jinja2模版引擎的使用方法和Django内置模版引擎的使用方法大体相同。下面看下Jinja2过滤器的使用和模版的继承。

Jinja2内置过滤器

以title过滤器(将每个单词的首字母大写)为例,进行展示:

内置过滤器的使用和Django内置模版相同,自定义过滤器的使用方法和Django内置模版有些差别,相对来说,Jinja2的自定义过滤器使用更加方便。

Jinja2自定义过滤器

Jinja2自定义过滤器直接在应用目录app下创建myfilter.py文件,编写自己的函数:

然后,在Jinja2的环境设置里面,将自己编写的过滤器函数添加进去:

test_jinja2.html中进行调用如下:

启动服务,访问如下:

模版的继承

Jinja2中模版的继承也是通过{% extends %}内置标签,我们把之前的base.html文件复制过来使用:

然后在test_jinja2.html文件中,通过下面的方式进行继承:

可以看到在Jinja2模版引擎中,继承父模版的方式和之前是相同的;但是在加载静态文件的时候,和之前的Django内置模版引擎不同,不再通过{% load static %} {% static static_file_path %}这样的方式进行调用,而是直接在href中设置静态文件的路径即可。

Mako模版引擎

下面介绍Mako模版引擎的配置和使用方法。

安装

配置

使用Mako模版引擎的时候,不需要在项目的配置文件(settings.py)中进行设置,不过需要我们重写一下render函数。在app/目录下创建base_render.py文件:

使用

下面通过简单的示例展示,如何使用Mako模版引擎。

(1)创建简单的视图函数如下(app/views.py):

(2)创建模版文件test_mako.html

(3)启动服务,在浏览器中进行访问

由上面的示例可以看出,在Mako模版引擎中,变量的表示方式和之前不同,现在使用${}的形式表达变量

下面总结Mako模版引擎中的一些用法:

1、循环(% for ... %endfor)

2、代码块(<% ... %>)

示例一:

示例二:

另外:看到网上的资料显示,如果需要导入模块的话,需要使用<%! ... %>。

例如:

<%!
from django.conf import settings
%>

${settings.TEMPLATES[0]['DIRS'][0]}

但是在实际测试过程中,发现使用<% ... %>也是可以完成上面导入模块的功能。 

3、模版继承

在Mako模版引擎中,模版的继承是通过函数继承的方式来实现的,主要用到的是:<%def> </%def>和<%inherit>。示例如下:

创建base.html文件:(这里<%def>...</%def>定义的区域就是将来子模版继承之后可以重写的部分;类似于之前的<% block data %>...<%endblock%>)

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>${self.title()}</title>
    ${self.css()}
</head>
<body>
    ${self.content()}
    ${self.js()}
</body>
</html>


<%def name="content()">
${self.main()}
</%def>
<%def name="title()"></%def>
<%def name="main()"></%def>
<%def name="js()"></%def>
<%def name="css()"></%def>

在test_mako.html文件中,通过下面的方式进行继承和重写:

<%inherit file='base.html' />
<%def name="title()">
Test_Mako
</%def>

<%def name="main()">
Hello Mako!!!
</%def>

<%def name="js()">
<script src="https://cdn.bootcss.com/jquery/2.2.0/jquery.js"></script>
</%def>


<%def name="css()">
<link rel="stylesheet" href="/static/mako.css" />
</%def>

启动服务,访问如下:

4、模版调用

在Mako模版引擎中,一个HTML文件可以调用另外一个HTML文件,主要使用的标签是<%page />和<%include />。

创建extends.html文件(将来会被调用):

<%page args="local_content" />
<textarea>
    ${local_content}
</textarea>

在test_mako.html文件中,调用extends.html文件:

<%include file="extends.html" args="local_content='你好'" />
<h1>
    Hello Django!
</h1>

启动服务,访问如下:

上面的部分就是对Mako模版引擎使用的一个简单介绍,因为在Mako模版引擎中我们可以直接在HTML文件中编写Python代码,进行对渲染过来的数据的二次处理,因此在Mako模版引擎中不需要过滤器。

参考资料

https://coding.imooc.com/class/393.html

猜你喜欢

转载自blog.csdn.net/ProQianXiao/article/details/113121217