3

在 php 文件中,此任务可能是另一个文件的简单包含,但我想知道在 Django 中是否有类似的做法?就像这里描述的:https ://docs.djangoproject.com/en/dev/ref/templates/builtins/?from=olddocs#include

4

2 回答 2

6

简短的回答:不,Python 不会那样执行。

这是一个很长的:

一点关于 PHP 和 Python Web 开发的区别

首先,includerequirePHP 语言本身的组成部分。这意味着在处理源代码之前,PHP 解释器包含来自文件的源代码作为这些函数的参数,然后进行解释。这就是 PHP 设计的主要目的(HTML,或者,一般来说,文本预处理)的继承。

Python 中的 Web 开发有点不同。语言本身被设计为通用编程语言,因此默认情况下它不假定文本处理。代码刚刚执行。这就是为什么 Web 开发通常使用框架(或wsgi模块,如果您更喜欢从头开始做所有事情的话)来完成的原因。

以上所有意味着所有文本操作(您生成的所有输出,您通常通过创建结果文本字符串(或与缓冲一起使用时的字符串列表)手动完成并自己提供输出结果。

模板语言

这是模板语言诞生的一个混乱点,它成为每个(或几乎每个)用 Python 编写的 Web 应用程序的重要组成部分(您可以假设与 PHP 世界中的 Smarty 类似)。它们有很多:jinja、jinja2、mako、chameleon ......等等。所有这些都是不同的,但服务于相同的目的(通过为基本表示逻辑的数据提供带有占位符的模板来简化文本生成)。

这就是 Python Web 框架的主要特点:应用程序逻辑和表示是严格分开的。

在这里,我们来到了您的问题的实质:

由于所有提供文本模板工具的模板库都是不同的,因此没有通用的方法来制作类似 PHP 的包含,我们可以说它们对于 Python 是通用的。这些工具中的每一个都提供了不同的处理方式和理念,具体包括,主要分为两种主流方式:

  • 基于宏和插槽(变色龙)
  • 基于模板继承(Jinja2、Django 模板语言)

您所需要做的就是选择一个最适合您的需求(无论您喜欢/不喜欢它们的语法,其中一些更快,一些更具可读性,等等..)并将其与其他提供逻辑的工具结合使用你的申请。

走近:关于 D​​jango

当您想要包含应用程序的某些重用部分(例如分页小部件)时,通常使用包含模板标签,您已经针对这些部分调整了视图上下文。

但是,当您有所有页面的公共标题或另一个公共部分时,最好使用继承,这分两步实现:

  • 创建基本模板(包含一般页眉和页脚)
  • 通过模板继承功能创建特定模板,特别是在 Django 中扩展模板标签
于 2012-08-20T09:14:57.423 回答
0

Python 不是 PHP!

Django 不允许您在模板中编写任意脚本(代码)。您应该在views.py(控制器)中完成所有计算/业务任务并将结果传递给模板。在模板中,您通常会遍历结果集并显示数据。在 django 1.4 中添加了一个新的 assignment 标签,所以你可以这样做

{% get_movie_tickets_for_theater movie theater as tickets %}

但是您get_movie_tickets_for_theater将在 templatetags python 文件中定义。

于 2012-08-20T09:25:49.657 回答