我在一个Django网站上工作,它有多个部分和小节。我希望有几个深度的模板继承:一个用于整个站点的基本模板,一个用于从根基本模板继承的每个节的基本模板,等等。以下是我所需目录结构的简化版本:
base.html
section1/
base.html
section2/
base.html
section3/
base.html
我希望section1/
下的所有文件都包含类似{% extends "base.html" %}
的内容,这意味着它们将扩展section1/base.html
。section1/base.html
将包含类似{% extends "../base.html" %}
的内容,这意味着它将扩展根级别的基文件。然而,我在文档中找不到任何提示这是可能的,我也找不到Django来区分"../base.html"
和"base.html"
。({% extends "../base.html" %}
抛出一个错误。)我想一个解决方法是重命名所有基本文件base_SECTIONNAME.html
,并更新从它们继承的所有文件,但我担心随着我的站点变大和节更改名称等,这可能会变得难以维护。我更喜欢利用指定的自然层次结构的解决方案按目录和子目录。
有什么想法吗?
可能是我监督了一些事情,但是你想要的一切都可以用django模板系统来完成。所有扩展调用都是相对于模板目录的。
为了让子目录中的所有base.html文件扩展base.html,只需在文件中放入
{% extends "base.html" %}
。section1/base.html应该是这样的。{% extends "base.html" %}
{# ... rest of your code ...#}
现在,要从section1获取文件以扩展section1/base.html,只需将
{% extends "section1/base.html" %}
放在它们的顶部。第2节、第3节等相同。它就是这么简单,但在文档中可能不是很明显。
我希望,我理解你的问题。
可以接受的答案,但我确实建议使用变量名来跟踪节结构。我个人的喜好是context processor。例如,如果站点的分区组织透明地反映在url中,请尝试以下操作:
然后在你的模板中,只需调用
可能还有很多其他方法可以做到这一点,但最主要的是要考虑避免将文件夹名称硬编码到模板中。这将为您带来很多里程,特别是因为您可以拖放模板之间的部分,如果他们碰巧足够相似。您还可以添加insert:
这种策略的好处当然是,您可以在不使用任何本地基本模板的情况下启动并运行fly weight部分。
你可以使用这个库:https://github.com/vb64/django.templates.relative.path
只需按以下方式填写模板:
{%加载相对路径% {%扩展“.base.html”%}
这将扩展模板“base.html”,该模板位于同一文件夹中
{%加载相对路径% {%扩展“…base.html”%}
扩展模板“base.html”,位于更高的两级
“include”标签也同样适用。
相关问题 更多 >
编程相关推荐