详解Python的Django框架中的模版相关知识

作者:goldensun 时间:2023-04-22 02:46:25 

HTML被直接硬编码在 Python 代码之中。


def current_datetime(request):
 now = datetime.datetime.now()
 html = "<html><body>It is now %s.</body></html>" % now
 return HttpResponse(html)

尽管这种技术便于解释视图是如何工作的,但直接将HTML硬编码到你的视图里却并不是一个好主意。 让我们来看一下为什么:

  •     对页面设计进行的任何改变都必须对 Python 代码进行相应的修改。 站点设计的修改往往比底层 Python 代码的修改要频繁得多,因此如果可以在不进行 Python 代码修改的情况下变更设计,那将会方便得多。

  •     Python 代码编写和 HTML 设计是两项不同的工作,大多数专业的网站开发环境都将他们分配给不同的人员(甚至不同部门)来完成。 设计者和HTML/CSS的编码人员不应该被要求去编辑Python的代码来完成他们的工作。

  •     程序员编写 Python代码和设计人员制作模板两项工作同时进行的效率是最高的,远胜于让一个人等待另一个人完成对某个既包含 Python又包含 HTML 的文件的编辑工作。

基于这些原因,将页面的设计和Python的代码分离开会更干净简洁更容易维护。 我们可以使用 Django的 模板系统 (Template System)来实现这种模式,这就是本章要具体讨论的问题。


模板系统基本知识

模板是一个文本,用于分离文档的表现形式和内容。 模板定义了占位符以及各种用于规范文档该如何显示的各部分基本逻辑(模板标签)。 模板通常用于产生HTML,但是Django的模板也能产生任何基于文本格式的文档。

让我们从一个简单的例子模板开始。 该模板描述了一个向某个与公司签单人员致谢 HTML 页面。 可将其视为一个格式信函:


<html>
<head><title>Ordering notice</title></head>

<body>

<h1>Ordering notice</h1>

<p>Dear {{ person_name }},</p>

<p>Thanks for placing an order from {{ company }}. It's scheduled to
ship on {{ ship_date|date:"F j, Y" }}.</p>

<p>Here are the items you'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't order a warranty, so you're on your own when
 the products inevitably stop working.</p>
{% endif %}

<p>Sincerely,<br />{{ company }}</p>

</body>
</html>

该模板是一段添加了些许变量和模板标签的基础 HTML 。 让我们逐步分析一下:

    用两个大括号括起来的文字(例如 {{ person_name }} )称为 变量(variable) 。这意味着在此处插入指定变量的值。 如何指定变量的值呢? 稍后就会说明。

    被大括号和百分号包围的文本(例如 {% if ordered_warranty %} )是 模板标签(template tag) 。标签(tag)定义比较明确,即: 仅通知模板系统完成某些工作的标签。

    这个例子中的模板包含一个for标签( {% for item in item_list %} )和一个if 标签({% if ordered_warranty %} )

    for标签类似Python的for语句,可让你循环访问序列里的每一个项目。 if 标签,正如你所料,是用来执行逻辑判断的。 在这里,tag标签检查ordered_warranty值是否为True。如果是,模板系统将显示{% if ordered_warranty %}和{% else %}之间的内容;否则将显示{% else %}和{% endif %}之间的内容。{% else %}是可选的。

    最后,这个模板的第二段中有一个关于filter过滤器的例子,它是一种最便捷的转换变量输出格式的方式。 如这个例子中的{{ship_date|date:”F j, Y” }},我们将变量ship_date传递给date过滤器,同时指定参数”F j,Y”。date过滤器根据参数进行格式输出。 过滤器是用管道符(|)来调用的,具体可以参见Unix管道符。

Django 模板含有很多内置的tags和filters,我们将陆续进行学习. 附录F列出了很多的tags和filters的列表,熟悉这些列表对你来说是个好建议. 你依然可以利用它创建自己的tag和filters。

标签:Django,模版
0
投稿

猜你喜欢

  • Golang中的Unicode与字符串示例详解

    2024-04-30 10:01:27
  • 使用Spry轻松将XML数据显示到HTML页

    2007-11-16 16:44:00
  • JavaScript自定义浏览器滚动条兼容IE、 火狐和chrome

    2024-04-16 09:37:25
  • python实现求纯色彩图像的边框

    2022-04-01 22:04:51
  • python argparse 模块命令行参数用法及说明

    2023-10-26 00:08:27
  • Python开发之迭代器&生成器的实战案例分享

    2021-03-18 17:34:33
  • JS 函数的 call、apply 及 bind 超详细方法

    2024-04-30 10:42:28
  • 解决python 文本过滤和清理问题

    2023-08-31 08:18:38
  • 基于php+mysql的期末作业小项目(学生信息管理系统)

    2023-06-13 00:39:34
  • Python DataFrame使用drop_duplicates()函数去重(保留重复值,取重复值)

    2023-09-29 20:42:35
  • logging level级别介绍

    2023-06-07 00:39:16
  • GO语言文件的创建与打开实例分析

    2024-05-21 10:21:19
  • python操作excel之openpyxl模块读写xlsx格式使用方法详解

    2021-01-16 23:17:50
  • 简评:JavaScript将成Silverlight的最大对手?

    2008-10-17 10:29:00
  • PHP原型模式Prototype Pattern的使用介绍

    2023-05-25 01:21:04
  • SQL Data Services将成为云中完整的数据库

    2009-03-25 12:28:00
  • python解析照片拍摄时间进行图片整理

    2023-02-13 07:40:54
  • 用正则表达式找出不包含连续字符串abc的单词

    2010-03-02 20:28:00
  • Python如何对齐字符串

    2023-05-30 01:21:11
  • asp + oracle 分页方法

    2010-05-11 20:09:00
  • asp之家 网络编程 m.aspxhome.com