我正在尝试以层次结构的形式获取Django项目模板的直观表示。
主要思想是获取模板名称列表作为加载机制将返回的默认模板(即尊重TEMPLATE_DIRS
,TEMPLATE_LOADERS
等),然后解析模板以查找{{1 }和{%extends%}标记,以便创建树结构。最后使用grapviz进行可视化。
我不确定这是否可行。但是,首先,我如何按照我描述的方式加载模板?
或许,类似的东西已经存在吗?
答案 0 :(得分:1)
通常,在线查找名称模板,每个可能使用的模板都没有根条目。
因此,如果要grep项目中所有使用过的模板,则需要扫描TEMPLATE_LOADERS中的加载器可能检查的每个位置,以生成可能的条目,以便以后从下到上检查。这很难,一些后端的加载器甚至可能不允许按目录操作进行操作 或者您可以解析INSTALLED_APPS中的视图和URL文件以grep模板名称,但这只适用于模板的硬编码名称,甚至更难。 此外,可能存在从硬编码字符串加载的模板...
对于给定的模板名称,更容易加载模板并检查其中的节点,就像您的想法一样。您可以查看django.template.base
以了解其工作原理。
此外,您可以利用django-debug-toolbar显示用于请求的模板。而且,IMO,保持模板结构扁平,简单,因此确定,更容易实现。