哪个Django模板布局更好?

3 投票
1 回答
1873 浏览
提问于 2025-04-18 03:36

哪个布局更好(Django 1.4+):

project/templates/base.html
# project/templates/app/base.html # overriding some_app at project level, optional
project/app/templates/app/base_app.html
project/app/templates/app/base_app_index.html
  • base_app_index.html 继承自 base_app.html -- 应用级别
  • base_app.html 继承自 base.html -- 项目级别。

还是像这样可重用(在一个项目中应用之间没有共享)

project/app/templates/app/base_app.html
project/app/templates/app/base_app_index.html
  • 只有 base_app_index.html 继承自 base_app.html

参考资料:

来自Django 文档:

  • 创建一个 base.html 模板,包含你网站的主要外观和风格。
  • 为你网站的每个“部分”创建一个 base_SECTIONNAME.html 模板。例如,base_news.html、base_sports.html。这些模板都继承自 base.html,并包含特定部分的样式/设计。
  • 为每种页面类型创建单独的模板,比如新闻文章或博客条目。这些模板继承相应的部分模板。

来自Django 最佳实践:

模板通常位于两个地方之一,应用内部或项目的根目录。我们建议将所有模板放在项目模板目录中,除非你打算将应用包含在多个项目中(或者将其开发为开源的“可重用”应用)。在这种情况下,提供一组示例模板在应用中是有帮助的,这样可以开箱即用,或者作为其他开发者的示例。

来自Django 两勺:

  • 每个应用都有一个 base_.html 模板。应用级别的基础模板共享一个共同的父模板 base.html。
  • 应用内的模板共享一个共同的父模板 base_.html。
  • 任何与 base.html 在同一层级的模板都会继承 base.html。

1 个回答

3

这主要取决于你的目的。对于大多数情况,第一个例子是最合适的。你的base.html文件会包含很多特定于你网站的内容,这些内容你不想在每一个base_app.html模板中重复。

如果你在制作可以重复使用的应用,并且想要分享给其他人,那么使用第二个例子可能更好。这样,使用你应用的人就不需要一个base.html模板就能让你的应用运行起来。这种方式更像是“全包”的。

这基本上就是那些文档想表达的意思。一般建议是使用第一种方法,除非你打算开源并把它放到PyPi之类的平台上。

即使你只是想让一个包在你自己的项目中重复使用(也就是说,在你正在进行的多个项目中使用),我还是建议你选择第一种方法。你可以确保在你的模板目录中始终有一个base.html

撰写回答