`
qzriso
  • 浏览: 243011 次
  • 性别: Icon_minigender_1
  • 来自: ph
社区版块
存档分类
最新评论

Django笔记8(模板引擎)

阅读更多
1.创建一个模板库
(1) 决定哪个Django应用应当拥有这个模板库, 确保把你的应用添加到 INSTALLED_APPS 中
(2) 在适当的Django应用包里创建一个 templatetags 目录。这个目录应当和 models.py 、 views.py 等处于同一层次。例如:

books/
    __init__.py
    models.py
    templatetags/
    views.py

在 templatetags 中创建两个空文件:一个 __init__.py (告诉Python这是一个包含了Python代码的包)和一个用来存放你自定义的标签/过滤器定义的文件。第二个文件的名字稍后将用来加载标签。例如,如果你的自定义标签/过滤器在一个叫作 poll_extras.py 的文件中,你需要在模板中写入如下内容:
{% load poll_extras %}
{% load %} 标签检查 INSTALLED_APPS 中的设置,仅允许加载已安装的Django应用程序中的模板库。
要成为有效的标签库,模块必须包含一个模块级的变量: register ,这是一个 template.Library 的实例。这个 template.Library 实例是包含所有已注册的标签及过滤器的数据结构。因此,在模块的顶部位置插入下述代码:
from django import template
register = template.Library()

2. 自定义模板过滤器
自定义过滤器就是有一个或两个参数的Python函数:
(输入)变量的值
参数的值, 可以是默认值或者完全留空
例如,在过滤器 {{ var|foo:”bar” }} 中 ,过滤器 foo 会被传入变量 var 和参数 bar 的内容。
过滤器函数应该总有返回值,而且不能触发异常,它们都应该静静的失败。如果有一个错误发生,它们要么返回原始的输入字符串,要么返回空的字符串,无论哪个都可以。
这里是一些定义过滤器的例子:

def cut(value, arg):
    "Removes all values of arg from the given string"
return value.replace(arg, '')
def lower(value): # Only one argument.
    "Converts a string into all lowercase"
    return value.lower()

这里是一些如何使用过滤器的例子:
{{ somevariable|cut:”0″ }}
当你在定义你的过滤器时,你需要用 Library 实例来注册它,这样就能通过Django的模板语言来使用了:

register.filter('cut', cut)
register.filter('lower', lower)

Library.filter() 方法需要两个参数:
过滤器的名称(一个字串)
过滤器函数本身
如果你使用的是Python 2.4或更新,你可以使用 register.filter() 作为一个装饰器:

@register.filter(name='cut')
def cut(value, arg):
    return value.replace(arg, '')

@register.filter
def lower(value):
return value.lower()

像第二个例子中,如果你不使用 name 参数,那么Django将会使用函数名作为过滤器的名字。
下面是一个完整的模板库的例子,提供了一个 cut 过滤器:

from django import template
register = template.Library()
@register.filter(name='cut')
def cut(value, arg):
return value.replace(arg, '')

3. 自定义模板标签
(1)定义标签

The time is {% current_time “%Y-%m-%d %I:%M %p” %}.

(2)编写模板标签分析器mytag.py

from django import template

def do_current_time(parser, token):
    try:
        # split_contents() knows not to split quoted strings.
        tag_name, format_string = token.split_contents()
    except ValueError:
        msg = '%r tag requires a single argument' % token.contents()[0]
        raise template.TemplateSyntaxError(msg)
    return CurrentTimeNode(format_string[1:-1])

(3) 编写模板节点

import datetime

class CurrentTimeNode(template.Node):

    def __init__(self, format_string):
        self.format_string = format_string

    def render(self, context):
        now = datetime.datetime.now()
        return now.strftime(str(self.format_string))

(4) 注册标签
register = template.Library()
register.tag(’current_time’, do_current_time)

@register.tag(name=”current_time”)
def do_current_time(parser, token):
# …
(4) 简单标签的快捷方式
Django 提供了一个帮助函数: simple_tag 。这个函数是 django.template.Library 的一个方法,它接受一个只有一个参数的函数作参数,把它包装在 render 函数和之前提及过的其他的必要单位中,然后通过模板系统注册标签。
我们之前的的 current_time 函数于是可以写成这样:

def current_time(format_string):
    return datetime.datetime.now().strftime(format_string)

register.simple_tag(current_time)

在Python 2.4中,也可以使用修饰语法:
@register.simple_tag
def current_time(token):

有关 simple_tag 辅助函数,需要注意下面一些事情:
传递给我们的函数的只有(单个)参数。
在我们的函数被调用的时候,检查必需参数个数的工作已经完成了,所以我们不需要再做这个工作。
参数两边的引号(如果有的话)已经被截掉了,所以我们会接收到一个普通字符串。

5. 包含标签
(1)定义标签
{% show_results poll %}
(2)标签函数

@register.inclusion_tag('books/books_for_author.html')
def show_books_for_author(author):
    books = author.book_set.all()
    return {'books': books}

(3)标签模板

<ul>
{% for book in books %}
    <li> {{ book }} </li>
{% endfor %}
</ul>
分享到:
评论

相关推荐

    2019版-千锋Django-源码+笔记.zip

    通过阅读和分析Django源码,开发者可以深入了解其内部工作机制,例如URL路由、模板引擎、中间件、数据库操作等。在2019版千锋Django的源码中,我们可以看到如何实现这些关键功能,从而提升对Django的使用技巧和问题...

    千锋教育Django笔记

    【千锋教育Django笔记】是一份专门为初学者设计的学习资料,它涵盖了Django框架的基础知识和实战技巧。Django是Python编程语言中一个强大的、免费的开源Web应用框架,它遵循模型-模板-视图(MTV)架构模式,旨在简化...

    Django入门与实践教程1

    【模板引擎设置】章节涉及Django的模板语言,讲解如何创建HTML模板,并利用模板引擎动态渲染数据。Django模板系统允许开发者分离视图逻辑和前端展示,使得代码更易于维护。 【第一个单元测试】章节介绍了Django的...

    Django入门笔记.doc

    Django入门笔记主要涵盖以下几个关键知识点: 1. **创建项目**:Django是Python的一款Web框架,用于快速开发高效、可维护的网站。创建项目是使用Django的第一步,通过命令行工具`django-admin startproject project...

    跟学django的笔记

    Django提供了一套完整的Web开发解决方案,包括ORM(对象关系映射)系统、内置的认证和授权机制、表单处理、URL路由以及强大的模板引擎。通过熟练掌握这些知识点,可以高效地构建复杂的Web应用。

    Django学习笔记

    Django拥有自己的模板引擎,支持多种高级特性,如继承、块、变量替换等。 #### 安装Django 1. **前提条件**:确保系统中已安装Python开发环境。 2. **安装步骤**: - 访问官方文档获取最新安装指导:[Django ...

    2023.07月基于Django开发的学习笔记博客及网站后台管理系统源码.zip

    Django是一个高度流行的Python Web框架,它提供了一整套解决方案,包括数据库交互、模板引擎、表单处理以及用户认证等,使得开发者能够快速地构建高效且安全的Web应用。 首先,让我们深入了解一下Django的关键组件...

    DJANGO课件

    - **模板响应**:视图通常会渲染一个模板,将数据传递给模板引擎,生成HTML响应。 5. **模板(Template)** - **Django模板语言**:使用模板标签和过滤器来动态生成HTML,支持变量替换、控制结构和继承。 - **...

    Mysql、Python、Django、Flask面试笔记大全

    面试时,需要对Django的模型(ORM)、视图、模板、URL路由有深入了解。了解如何创建表单、处理用户认证和授权、中间件的使用、自定义管理后台、性能优化,以及Django Rest Framework在API开发中的应用,都是可能的...

    全套百度云教程:python基础+进阶+项目篇 (含Django和Tornado)

    4. **模板系统**:理解Django的模板引擎、标签、过滤器等。 5. **URL分发**:配置URL、视图函数的关联。 6. **表单处理**:创建表单、验证数据、表单渲染等。 7. **用户认证与权限管理**:用户注册、登录、退出、...

    使用django开发名为学习笔记的项目,完成网站成功实现了用户注册,用户登录功能,实现用户自己仅能访问自己创建的日记等等

    5. **模板与前端展示**:Django的模板引擎允许开发者创建动态HTML页面。在“学习笔记”项目中,每个页面(如登录、注册、日记列表、日记详情等)都有对应的模板文件,其中包含HTML结构和Django模板语言,用于插入...

    老男孩第14期Day16期课堂源码实录及笔记 oldboy python全栈

    比如,"day16"可能涵盖了Python Web开发中的某个重要概念或技术,如数据库操作、模板引擎、表单处理、用户认证等。 【压缩包子文件的文件名称列表】中的文件名看起来像是HTML格式的教学材料,可能包括了课堂讲解的...

    django架构学习

    Django是一个高性能、简洁且实用的Web开发框架,它提供了许多内置功能,如ORM(对象关系映射)、模板引擎、表单处理和URL路由等,使得Web应用的开发变得更加高效。 在项目ComPerformance中,Django 1.3.1版本被用作...

    python毕业设计之招聘数据分析可视化系统(django)源码.zip

    本项目可能使用Django自带的模板引擎和JavaScript库如Plotly或Highcharts来实现交互式图表,展示招聘数据的分布、关联和趋势,帮助用户直观地理解分析结果。 5. 源码结构:项目包含的"project"文件夹很可能是Django...

    django,mysql,全栈 搭建的web.seesion,cookie权限

    创建一个新的Django项目后,我们需要定义应用,例如“云笔记项目”。在应用中创建models.py文件定义数据模型,然后使用makemigrations和migrate命令同步数据库。接着,在views.py中编写视图函数,处理用户请求,并...

    Django-CoolBlog:基于Django开发的个人博客系统

    Django提供了许多内置功能,如ORM(对象关系映射),模板引擎,URL路由,表单处理和用户认证等。开发者无需从零开始,可以快速构建复杂的Web应用。 2. **项目结构** Django-CoolBlog的项目结构通常包含以下几个...

    python1903笔记 06-web前端.zip

    模板引擎是Python Web开发中的一个重要工具,如Jinja2(常用于Flask)和Django模板语言。它们允许开发者将动态数据嵌入到HTML模板中,生成最终的HTML页面。这简化了前后端的分离,提高了代码的可维护性和复用性。 ...

    python199基于Django的校园疫情监控平台.zip

    5. **模板引擎**:学习Django的模板语言,用于渲染动态内容到HTML页面。 6. **数据分析与可视化**:可能涉及到对疫情数据的统计分析,如病例数量、趋势分析等,并通过图表展示。 7. **Web安全**:理解并实施Django...

    毕业设计:基于 Python and Django的微型博客系统.zip

    通过分析和理解这些源码,学生可以深入学习Web开发的全貌,包括HTTP协议、模板引擎、数据库操作、视图函数、模型设计等。 【标签】:“毕业设计”,“python”,“系统” 毕业设计是大学教育的重要组成部分,旨在...

    python 快速搭建blog demo

    这个项目通常会涵盖Python Web开发的基础知识,包括框架的选择、数据库的交互以及模板引擎的运用。下面我们将深入探讨这个Demo中的核心知识点。 1. Python Web框架选择:在Python Web开发中,最常用的是Django和...

Global site tag (gtag.js) - Google Analytics