第四章 模版
点语法
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
。对此如何取舍取决你的应用程序。
分享到:
相关推荐
Django提供了一本官方的书籍,全名《The Django Book》,这本中版书籍可以帮助开发者快速了解Django框架,并掌握其核心概念和技术。书中详细介绍了Django的安装,包括Python和Django自身的安装,以及数据库的安装和...
2019版千锋Django的源码与笔记资源,为初学者和进阶者提供了一个全面且深度的学习平台,它不仅包含了源代码,还配有思维导图,旨在帮助开发者更好地理解和掌握Django的核心概念和技术。 一、Django简介 Django是...
Django-商城项目Django-商城项目Django-商城项目Django-商城项目Django-商城项目Django-商城项目Django-商城项目Django-商城项目Django-商城项目Django-商城项目Django-商城项目Django-商城项目Django-商城项目...
根据提供的文件信息,...通过本章的学习,读者可以对Django有一个基本的了解,并具备初步的开发能力。接下来的章节将更深入地探讨Django的各项高级特性,如模板系统、表单处理、认证系统等,帮助读者成为Django专家。
本书《Beginning Django E-Commerce》旨在为有兴趣学习如何创建Django网站的开发者提供全面指导。作者Jim McGaw通过本书带领读者从零开始构建一个完整的电子商务网站,并最终将其部署上线。本书适合对Python编程有...
3、本项目适合作为计算机、数学、电子信息等专业的课程设计、期末大作业和毕设项目,作为参考资料学习借鉴。 4、本资源作为“参考资料”如果需要实现其他功能,需要能看懂代码,并且热爱钻研,自行调试。 基于...
- **Writing your first Django app, part 1-7 (编写你的第一个 Django 应用, 第 1 至 7 部分)**: 通过一系列教程引导读者完成一个完整的应用开发过程。 - **Advanced tutorial: How to write reusable apps (进阶...
为支持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 ...
同时,由于Django的强大生态,开发者还可以利用大量的第三方库来增强功能,如使用`django-crispy-forms`优化表单展示,或者使用`django-rest-framework`构建API接口。 总的来说,`django-layers-hr-1.9`为Python...
资源分类:Python库 所属语言:Python 资源全名:Django-3.2.11-py3-none-any.whl 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059
- **第4章:Django模板系统** - 深入探讨了Django的模板语言,以及如何创建和管理模板。 - **第5章:数据库交互:模型** - 解释了ORM工作方式,以及如何定义和操作数据模型。 - **第6章:Django管理站点** - 描述了...
Django-2.1-py3-none-any.whl 从国外网站下载Django-2.1-py3-none-any.whl太慢了,基本几KB 传上来共享给大家 省的大家自己下了
资源来自pypi官网。 资源全名:Django-3.1.1-py3-none-any.whl
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
**标题解析:** "django-cors-headers-3.0.2.tar.gz" 是一个针对 Django 框架的第三方库 "django-cors-headers" 的版本 3.0.2 的压缩包文件,通常以 .tar.gz 格式提供。这种格式是一种常见的在 Linux 和类 Unix 系统...
"django-exsample-book-code"这个压缩包包含了该书中的所有源代码,是学习和实践Django开发的重要资源。 Django是Python Web开发的一个强大框架,它以其“ Batteries Included ”的理念著称,即内置了许多功能,...
Django-REST-framework教程中文版是一份关于如何使用Django-REST-framework来快速创建REST风格API的中文教程。Django-REST-framework是一个建立在Django框架之上的强大的REST API工具包,它允许开发者利用Django的...
资源分类:Python库 所属语言:Python 资源全名:django-cascading-dropdown-widget-0.2.6.tar.gz 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059