在django/python web app中包含常用内容(例如标题脚本)的最佳方法是什么

wea*_*ide 3 python django

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

Ros*_*nko 6

简短的回答:不,Python没有那样做.

这是一个很长的一个:

关于PHP和Python Web开发之间的区别

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

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

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

模板语言

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

这里是Python Web框架的主要特性:应用程序逻辑和表示是严格分割的.

在这里,我们谈到了你问题的实质:

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

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

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

越来越近:关于Django

当您想要包含一些重复使用的应用程序部分(例如分页小部件)时,使用包含模板标记是很常见的,您已为其调整了视图上下文.

但是当你有所有页面或其他公共部分的公共标题时,最好使用继承,这是通过两个步骤实现的:

  • 创建基本模板(包含常规页眉和页脚)
  • 通过模板继承功能创建特定模板,特别是在Django中扩展模板标签