目录
Ordering notice
首页 后端开发 Python教程 Django 基础教程 - 模板

Django 基础教程 - 模板

Oct 17, 2016 pm 02:16 PM

注明:python版本为3.3.1、Django版本为1.5.1,操作系统为Windows7,其他版本有一些不同的地方读者可以自行探讨。

在上一章你可能已经发现了这样的问题,就是在视图返回文本的时候,HTML代码被硬编码在了python的代码中。如%s等等。像这样写往往使得程序更加复杂,一旦修改起来又显得十分的麻烦,而且HTML代码程序员不见得会python代码,现在的开发一般都会使得HTML前台页面和Python后台分离,也就是前台只负责显示页面,后台只负责处理数据和其他操作。因此,模板显得尤为重要。

那么,什么是模板呢?

模板是一个文本,用于分离文档的表现形式和内容。 模板定义了占位符以及各种用于规范文档该如何显示的各部分基本逻辑(模板标签)。 模板通常用于产生HTML,但是Django的模板也能产生任何基于文本格式的文档。下面我们从一个简单的例子来学习下什么是模板。(这个例子源自DjangoBook2)

 <head><title>Ordering notice</title></head>
 <body>
 <h1 id="Ordering-nbsp-notice">Ordering notice</h1>
 <p>Dear {{ person_name }},</p>
 <p>Thanks for placing an order from {{ company }}. It&#39;s scheduled to
 ship on {{ ship_date|date:"F j, Y" }}.</p>
 <p>Here are the items you&#39;ve ordered:</p>
 <ul>
 {% for item in item_list %}
     <li>{{ item }}</li>
 {% endfor %}
 </ul>
 {% if ordered_warranty %}
     <p>Your warranty information will be included in the packaging.</p>
 {% else %}
     <p>You didn&#39;t order a warranty, so you&#39;re on your own when
     the products inevitably stop working.</p>
 {% endif %}
 <p>Sincerely,<br />{{ company }}</p>
 </body>
 </html>
登录后复制


如上所示用{{...}}或者{%...%}来替代python代码的方式就是模板,像第一个{{person_name}}其实就是一个变量,而{%for....%}或者{% if ...%}等就是循环。先不去深究上面的代码的意思,我们下面一步一步来学习怎么使用它。

>>> from django import template
>>> t = template.Template(&#39;My name is {{ name }}.&#39;)
>>> c = template.Context({&#39;name&#39;: &#39;Adrian&#39;})
>>> print(t.render(c))
My name is Adrian.
>>> c = template.Context({&#39;name&#39;: &#39;Fred&#39;})
>>> print(t.render(c))
My name is Fred.
登录后复制


当你看到上面的代码时你可能会急不可耐的去尝试,结果在第二行却出现了错误。一般来说唯一可能出现的错误就是:'DJANGO_SETTINGS_MODULE'error,这是因为Django搜索DJANGO_SETTINGS_MODULE环境变量时,它被设置在settings.py中,而直接启动python shell就会导致它不知道用哪个配置文件。例如,假设mysite在你的Python搜索路径中,那么DJANGO_SETTINGS_MODULE应该被设置为:’mysite.settings’。所以为了免去设置环境变量的麻烦,我们应该这样启动python shell。

python manage.py shell

这样可以免去你大费周章地去配置那些你不熟悉的环境变量。

下面我们来分析下那段代码。

>>> from django import template  #从django中导入template对象
>>> t = template.Template(&#39;My name is {{ name }}.&#39;)  #使用template对象的Template()方法
>>> c = template.Context({&#39;name&#39;: &#39;Adrian&#39;})  #使用template对象的Context()函数给赋值,比如name的值就是Adrian,Context()的()里面是一个字典
>>> print(t.render(c))   #渲染模板,也就是讲Context赋值后的name的值Adrian替换上面Template()中的{{name}}并输出
My name is Adrian.
>>> c = template.Context({&#39;name&#39;: &#39;Fred&#39;})
>>> print(t.render(c))
My name is Fred.
登录后复制


从上面的例子可以看出,使用模板的三步。一、调用Template函数;二、调用Context函数;三、调用render函数。就这么简单。


下面我们再通过几个代码来说说Context()函数。

#代码段1:
>>> from django.template import Template,Context
>>> t=Template(&#39;hello,{{name}}&#39;)
>>> for name in (&#39;A&#39;,&#39;B&#39;,&#39;C&#39;):
...     print(t.render(Context({&#39;name&#39;:name})))
...
hello,A
hello,B
hello,C
#代码段2:
>>> from django.template import Template,Context
>>> person={&#39;name&#39;:&#39;Thunder&#39;,&#39;age&#39;:&#39;108&#39;}
>>> t=Template(&#39;{{person.name}} is {{person.age}} years old!&#39;)
>>> c=Context({&#39;person&#39;:person})#后面的这个person是一个字典
>>> t.render(c)
&#39;Thunder is 108 years old!&#39;
#代码段3:
>>> from django.template import Template,Context
>>> t=Template(&#39;Item 2 is {{items.2}}&#39;)#items.2的意思是调用items列表的第3个元素,因为列表的索引是从0开始的
>>> c=Context({&#39;items&#39;:[&#39;Apple&#39;,&#39;Banana&#39;,&#39;Orange&#39;]})
>>> t.render(c)
&#39;Item 2 is Orange&#39;
登录后复制


注意:上面的items.2不能是items.-1或者其他什么负数索引。

好好观察上面三段代码,是不是就举一反三了呢?另外默认情况下,如果一个变量不存在,模板系统会把它展示为空字符串,不做任何事情来表示失败。



本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

<🎜>:泡泡胶模拟器无穷大 - 如何获取和使用皇家钥匙
4 周前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系统,解释
4 周前 By 尊渡假赌尊渡假赌尊渡假赌
Mandragora:巫婆树的耳语 - 如何解锁抓钩
3 周前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

热门话题

Java教程
1672
14
CakePHP 教程
1428
52
Laravel 教程
1332
25
PHP教程
1277
29
C# 教程
1257
24
Python与C:学习曲线和易用性 Python与C:学习曲线和易用性 Apr 19, 2025 am 12:20 AM

Python更易学且易用,C 则更强大但复杂。1.Python语法简洁,适合初学者,动态类型和自动内存管理使其易用,但可能导致运行时错误。2.C 提供低级控制和高级特性,适合高性能应用,但学习门槛高,需手动管理内存和类型安全。

学习Python:2小时的每日学习是否足够? 学习Python:2小时的每日学习是否足够? Apr 18, 2025 am 12:22 AM

每天学习Python两个小时是否足够?这取决于你的目标和学习方法。1)制定清晰的学习计划,2)选择合适的学习资源和方法,3)动手实践和复习巩固,可以在这段时间内逐步掌握Python的基本知识和高级功能。

Python vs.C:探索性能和效率 Python vs.C:探索性能和效率 Apr 18, 2025 am 12:20 AM

Python在开发效率上优于C ,但C 在执行性能上更高。1.Python的简洁语法和丰富库提高开发效率。2.C 的编译型特性和硬件控制提升执行性能。选择时需根据项目需求权衡开发速度与执行效率。

Python vs. C:了解关键差异 Python vs. C:了解关键差异 Apr 21, 2025 am 12:18 AM

Python和C 各有优势,选择应基于项目需求。1)Python适合快速开发和数据处理,因其简洁语法和动态类型。2)C 适用于高性能和系统编程,因其静态类型和手动内存管理。

Python标准库的哪一部分是:列表或数组? Python标准库的哪一部分是:列表或数组? Apr 27, 2025 am 12:03 AM

pythonlistsarepartofthestAndArdLibrary,herilearRaysarenot.listsarebuilt-In,多功能,和Rused ForStoringCollections,而EasaraySaraySaraySaraysaraySaraySaraysaraySaraysarrayModuleandleandleandlesscommonlyusedDduetolimitedFunctionalityFunctionalityFunctionality。

Python:自动化,脚本和任务管理 Python:自动化,脚本和任务管理 Apr 16, 2025 am 12:14 AM

Python在自动化、脚本编写和任务管理中表现出色。1)自动化:通过标准库如os、shutil实现文件备份。2)脚本编写:使用psutil库监控系统资源。3)任务管理:利用schedule库调度任务。Python的易用性和丰富库支持使其在这些领域中成为首选工具。

科学计算的Python:详细的外观 科学计算的Python:详细的外观 Apr 19, 2025 am 12:15 AM

Python在科学计算中的应用包括数据分析、机器学习、数值模拟和可视化。1.Numpy提供高效的多维数组和数学函数。2.SciPy扩展Numpy功能,提供优化和线性代数工具。3.Pandas用于数据处理和分析。4.Matplotlib用于生成各种图表和可视化结果。

Web开发的Python:关键应用程序 Web开发的Python:关键应用程序 Apr 18, 2025 am 12:20 AM

Python在Web开发中的关键应用包括使用Django和Flask框架、API开发、数据分析与可视化、机器学习与AI、以及性能优化。1.Django和Flask框架:Django适合快速开发复杂应用,Flask适用于小型或高度自定义项目。2.API开发:使用Flask或DjangoRESTFramework构建RESTfulAPI。3.数据分析与可视化:利用Python处理数据并通过Web界面展示。4.机器学习与AI:Python用于构建智能Web应用。5.性能优化:通过异步编程、缓存和代码优

See all articles