【问题标题】:How to get all children templates of django parent template (file name, modification)?如何获取django父模板的所有子模板(文件名,修改)?
【发布时间】:2015-08-16 10:42:02
【问题描述】:

我想知道 Django 中依赖于父模板的子模板。我需要知道所有文件名或修改日期。我如何在 Django 中检查它。

例如{% extend %}{% include %}等孩子。

【问题讨论】:

  • 简短回答:不可能。长答案:Wojtek Szkutnik 下面的答案是你能得到的最接近的答案。

标签: python django django-templates


【解决方案1】:

由于 {% extends %} 和 {% include %} 也接受变量作为参数,除非这些变量具有确定性的值,否则生成模板继承树没有防弹的方法。毕竟,这些变量值可能会以代码无法预测的方式发生变化。

如果您只使用静态扩展和包含,那么我认为常规文本搜索是您最好的朋友。你可以这样做:

find . -name "*.html" -print | xargs grep "{% extends "

在您的项目文件夹中生成所有扩展标签的列表,然后您只需要解析输出。包含标签也是如此。

对于不同的解决方案,我想您可以在 Django 模板引擎中添加一些调试代码并遍历整个站点或特定页面 - 这样您就可以构建这样的树,但仅限于您定义的视图和条件。

【讨论】:

  • 你不在这里,因为我问了不同的问题。我想知道所有嵌套的 {% extends %} 和 {% include %} (文件名,修改)。不想知道如果我将应用变量会发生什么 - 什么也是确定性的,但更少并且需要非常复杂的解决方案 - 我只想学习文件依赖关系。
  • 有些事情也可以是暂时确定的,例如 15 分钟或 1 小时 - 它们不是永远确定的。
  • 好的,让我重新表述变量部分:如果您在 {% extends %} 和 {% include %} 中使用变量,则无法生成该树(例如,如果您执行 {% extends logged_in_layout %}),除非您为这些变量定义了可能的值集。
  • 如果您使用静态值,例如 {% extends 'logged_in_layout.html' %} ,最简单的方法是常规文本搜索。您只是在特定类型的文件(模板)中寻找一个非常特定的模式(两个模板标签),因此您可以编写一个脚本来查找所有这些标签,然后构建一棵树。
  • 更具体地说:查找 . -name "*.html" -print |项目主文件夹中的 xargs grep "{% extends " 应该可以解决扩展问题。另外 - 如果您想查找用于特定页面的模板,您可以使用 django-debug-toolbar,它会显示当前请求的列表。
猜你喜欢
  • 1970-01-01
  • 2012-06-24
  • 1970-01-01
  • 2015-03-13
  • 2018-08-18
  • 1970-01-01
  • 2012-01-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多