`

django book-学习笔记(第四章)

阅读更多

 

第四章 模版

 

点语法

1、用来引用对象的* 方法*。 

 

>>> t = Template('{{ var }} -- {{ var.upper }} -- {{ var.isdigit }}')
>>> t.render(Context({'var': 'hello'}))
u'hello -- HELLO -- False'
>>> t.render(Context({'var': '123'}))
u'123 -- 123 -- True'
 

注意这里调用方法时并* 没有* 使用圆括号 而且也无法给该方法传递参数;你只能调用不需参数的方法。

 

 

2、可用于访问列表索引,例如:

 

>>> from django.template import Template, Context
>>> t = Template('Item 2 is {{ items.2 }}.')
>>> c = Context({'items': ['apples', 'bananas', 'carrots']})
>>> t.render(c)
u'Item 2 is carrots.'
 

Python 列表类型

一点提示: Python的列表是从0开始索引。 第一项在索引0位置上,第二项在索引1位置上,依此类推。

句点查找规则可概括为: 当模板系统在变量名中遇到点时,按照以下顺序尝试进行查找:

<!--[if !supportLists]-->·         <!--[endif]-->字典类型查找 (比如 foo["bar"] )

<!--[if !supportLists]-->·         <!--[endif]-->属性查找 (比如 foo.bar )

<!--[if !supportLists]-->·         <!--[endif]-->方法调用 (比如 foo.bar() )

<!--[if !supportLists]-->·         <!--[endif]-->列表类型索引查找 (比如 foo[bar] )

系统使用所找到的第一个有效类型。 这是一种短路逻辑。

 

 

 

给标签增加一个 reversed 使得该列表被反向迭代:

 

{% for athlete in athlete_list reversed %}
...
{% endfor %}
 


在执行循环之前先检测列表的大小是一个通常的做法,当列表为空时输出一些特别的提示。

 

{% if athlete_list %}
    {% for athlete in athlete_list %}
        <p>{{ athlete.name }}</p>
    {% endfor %}
{% else %}
    <p>There are no athletes. Only computer programmers.</p>
{% endif %}
 

因为这种做法十分常见,所以"for" 标签支持一个可选的" {% empty %}"分句,通过它我们可以定义当列表为空时的输出内容 下面的例子与之前那个等价:

 

{% for athlete in athlete_list %}
    <p>{{ athlete.name }}</p>
{% empty %}
    <p>There are no athletes. Only computer programmers.</p>
{% endfor %}
 

Django不支持退出循环操作。 如果我们想退出循环,可以改变正在迭代的变量,让其仅仅包含需要迭代的项目。 同理,Django也不支持continue语句,我们无法让当前迭代操作跳回到循环头部。

 

 

 

 

forloop.counter 总是一个表示当前循环的执行次数的整数计数器。 这个计数器是从1开始的,所以在第一次循环时 forloop.counter 将会被设置为1

 

{% for item in todo_list %}
    <p>{{ forloop.counter }}: {{ item }}</p>
{% endfor %}
 

forloop.counter0 类似于 forloop.counter ,但是它是从0计数的。 第一次执行循环时这个变量会被设置为0

forloop.revcounter 是表示循环中剩余项的整型变量。 在循环初次执行时将被设置为序列中项的总数。 最后一次循环执行中,这个变量将被置1

forloop.revcounter0 类似于 forloop.revcounter ,但它以0做为结束索引。在第一次执行循环时,该变量会被置为序列的项的个数减1

forloop.first 是一个布尔值。 在第一次执行循环时该变量为True,在下面的情形中这个变量是很有用的。

 

{% for object in objects %}
    {% if forloop.first %}<li class="first">{% else %}<li>{% endif %}
    {{ object }}
    </li>
{% endfor %}

forloop.parentloop 是一个指向当前循环的上一级循环的 forloop 对象的引用(在嵌套循环的情况下)。

 

 

只有模板变量,字符串,整数和小数可以作为 {% ifequal %} 标签的参数。

 

 

 

如果要实现多行注释,可以使用"{% comment %}" 模板标签,就像这样

 

{% comment %}
This is a
multi-line comment.
{% endcomment %}
 

 

 

过滤器的参数跟随冒号之后并且总是以双引号包含。 例如

 

{{ bio|truncatewords:"30" }}
 

 

Python 要求单元素元组中必须使用逗号,以此消除与圆括号表达式之间的歧义。 这是新手常犯的错误。

 

 

如果使用的是 Windows 平台,请包含驱动器符号并使用Unix风格的斜杠(/)而不是反斜杠(),就像下面这样:

 

TEMPLATE_DIRS = (
    'C:/www/django/templates',
)
 

最省事的方式是使用绝对路径(即从文件系统根目录开始的目录路径)。 如果想要更灵活一点并减少一些负面干扰,可利用 Django 配置文件就是 Python 代码这一点来动态构建 TEMPLATE_DIRS 的内容,如: 例如:

 

import os.path
 
TEMPLATE_DIRS = (
    os.path.join(os.path.dirname(__file__), 'templates').replace('\\','/'),
)
 

这个例子使用了神奇的 Python 内部变量 __file__ ,该变量被自动设置为代码所在的 Python 模块文件名。 " os.path.dirname(__file__)" 将会获取自身所在的文件,即settings.py 所在的目录,然后由os.path.join 这个方法将这目录与 templates 进行连接。如果在windows下,它会智能地选择正确的后向斜杠进行连接,而不是前向斜杠”/”

 

 

 

render_to_response()

 

from django.shortcuts import render_to_response
import datetime
 
def current_datetime(request):
    now = datetime.datetime.now()
    return render_to_response('current_datetime.html', {'current_date': now})
 

 

 

 

locals() 技巧

思考一下我们对 current_datetime 的最后一次赋值:

def current_datetime(request):
    now = datetime.datetime.now()
    return render_to_response('current_datetime.html', {'current_date': now})
 

很多时候,就像在这个范例中那样,你发现自己一直在计算某个变量,保存结果到变量中(比如: 前面代码中的 now ),然后将这些变量发送给模板。特别懒的程序员可能注意到给这些临时变量 模板变量命名显得有点多余。

如果你是个喜欢偷懒的程序员并想让代码看起来更加简明,可以利用 Python 的内建函数 locals() 。它返回的字典对所有局部变量的名称与值进行映射。 因此,前面的视图可以重写成下面这个样子:

def current_datetime(request):
    current_date = datetime.datetime.now()
    return render_to_response('current_datetime.html', locals())
 

在此,我们没有像之前那样手工指定 context 字典,而是传入了 locals() 的值,它囊括了函数执行到该时间点时所定义的一切变量。 因此,我们将 now 变量重命名为 current_date ,因为那才是模板所预期的变量名称。 在本例中, locals() 并没有带来多 的改进,但是如果有多个模板变量要界定而你又想偷懒,这种技术可以减少一些键盘输入。

使用 locals() 时要注意是它将包括 所有 的局部变量,组成它的变量可能比你想让模板访问的要多。 在前例中, locals() 还包含了 request 。对此如何取舍取决你的应用程序。

 

 

 

 

 

分享到:
评论

相关推荐

    The Django Book-----中文版.pdf

    Django提供了一本官方的书籍,全名《The Django Book》,这本中版书籍可以帮助开发者快速了解Django框架,并掌握其核心概念和技术。书中详细介绍了Django的安装,包括Python和Django自身的安装,以及数据库的安装和...

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

    2019版千锋Django的源码与笔记资源,为初学者和进阶者提供了一个全面且深度的学习平台,它不仅包含了源代码,还配有思维导图,旨在帮助开发者更好地理解和掌握Django的核心概念和技术。 一、Django简介 Django是...

    Django-商城项目

    Django-商城项目Django-商城项目Django-商城项目Django-商城项目Django-商城项目Django-商城项目Django-商城项目Django-商城项目Django-商城项目Django-商城项目Django-商城项目Django-商城项目Django-商城项目...

    djangobook-readthedocs-io-zh-cn-latest.pdf

    根据提供的文件信息,...通过本章的学习,读者可以对Django有一个基本的了解,并具备初步的开发能力。接下来的章节将更深入地探讨Django的各项高级特性,如模板系统、表单处理、认证系统等,帮助读者成为Django专家。

    Beginning Django E-Commerce

    本书《Beginning Django E-Commerce》旨在为有兴趣学习如何创建Django网站的开发者提供全面指导。作者Jim McGaw通过本书带领读者从零开始构建一个完整的电子商务网站,并最终将其部署上线。本书适合对Python编程有...

    基于Django+Django -Rest-Framework+Python的在线考试系统后端(源码).zip

    3、本项目适合作为计算机、数学、电子信息等专业的课程设计、期末大作业和毕设项目,作为参考资料学习借鉴。 4、本资源作为“参考资料”如果需要实现其他功能,需要能看懂代码,并且热爱钻研,自行调试。 基于...

    Django docs-1.11-en

    - **Writing your first Django app, part 1-7 (编写你的第一个 Django 应用, 第 1 至 7 部分)**: 通过一系列教程引导读者完成一个完整的应用开发过程。 - **Advanced tutorial: How to write reusable apps (进阶...

    django3-cas-ng-4.0.0.tar.gz

    为支持django3对django_cas_ng进行修改 **Features** - Support CAS version 1.0, 2.0, 3.0 - Support Single Sign Out - Configuration of services via the django Admin application - Fine control on ...

    Python库 | django-layers-hr-1.9.tar.gz

    同时,由于Django的强大生态,开发者还可以利用大量的第三方库来增强功能,如使用`django-crispy-forms`优化表单展示,或者使用`django-rest-framework`构建API接口。 总的来说,`django-layers-hr-1.9`为Python...

    Python库 | Django-3.2.11-py3-none-any.whl

    资源分类:Python库 所属语言:Python 资源全名:Django-3.2.11-py3-none-any.whl 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059

    Django book pdf 完整版

    - **第4章:Django模板系统** - 深入探讨了Django的模板语言,以及如何创建和管理模板。 - **第5章:数据库交互:模型** - 解释了ORM工作方式,以及如何定义和操作数据模型。 - **第6章:Django管理站点** - 描述了...

    Django-2.1-py3-none-any.whl

    Django-2.1-py3-none-any.whl 从国外网站下载Django-2.1-py3-none-any.whl太慢了,基本几KB 传上来共享给大家 省的大家自己下了

    PyPI 官网下载 | Django-3.1.1-py3-none-any.whl

    资源来自pypi官网。 资源全名:Django-3.1.1-py3-none-any.whl

    Python在线考试系统后端-大学毕业设计-基于Django+Django -Rest-Framework

    Python在线考试系统后端-大学毕业设计-基于Django+Django -Rest-Framework 适合大学生计算机专业的毕业设计,课程设计。 Python在线考试系统后端-大学毕业设计-基于Django+Django -Rest-Framework 适合大学生...

    Django14-1.4.14-1.sdl6.noarch.rpm

    Django14-1.4.14-1.sdl6.noarch.rpm Django14-1.4.14-1.sdl6.noarch.rpm

    django-cors-headers-3.0.2.tar.gz

    **标题解析:** "django-cors-headers-3.0.2.tar.gz" 是一个针对 Django 框架的第三方库 "django-cors-headers" 的版本 3.0.2 的压缩包文件,通常以 .tar.gz 格式提供。这种格式是一种常见的在 Linux 和类 Unix 系统...

    django-exsample-book-code

    "django-exsample-book-code"这个压缩包包含了该书中的所有源代码,是学习和实践Django开发的重要资源。 Django是Python Web开发的一个强大框架,它以其“ Batteries Included ”的理念著称,即内置了许多功能,...

    Django-REST-framework教程中文版

    Django-REST-framework教程中文版是一份关于如何使用Django-REST-framework来快速创建REST风格API的中文教程。Django-REST-framework是一个建立在Django框架之上的强大的REST API工具包,它允许开发者利用Django的...

    Python库 | django-cascading-dropdown-widget-0.2.6.tar.gz

    资源分类:Python库 所属语言:Python 资源全名:django-cascading-dropdown-widget-0.2.6.tar.gz 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059

Global site tag (gtag.js) - Google Analytics