关于模板的Django模块化应用程序的最佳策略

时间:2013-05-05 17:26:38

标签: django

我正在Django项目中工作,在开发过程中我创建了一个我认为可能在其他项目中有用的应用程序。我想我已经开发了一个相当模块化的应用程序,除了一个方面。这就是这个问题的对象:模板。

在我的情况下,我的一个页面生成一个表,并尽量保持干净,我没有添加任何CSS,div或任何东西。只是干净的HTML。现在,我如何在其他项目中使用此应用程序,使该表看起来像?你知道,使用通常的CSS样式甚至JS(例如表格重新排序)。我认为解决方案是在原始应用代码中添加{%blocks%},但这似乎不合适。

有什么建议吗?

2 个答案:

答案 0 :(得分:2)

wrt / reusable apps,通常的模式是使用应用程序(在appname / templates / appname /中)提供最少的工作模板,并在项目的模板目录中基于每个项目覆盖它们。模板确实是项目特定的,并且是“集成”层之一,因此您无法提供一个适合所有模板。

答案 1 :(得分:2)

要创建一个可插入的应用,如您在评论中所述,您可以在应用内创建模板目录。例如app/templates,而不是template_dir设置中的模板目录。

在模板中使用extends来继承一个基站html文件,该文件可能因站点而异。

在呈现表格的模板中

table.html

{% extends "base.html" %}
{% block content %}
{% include "cleantable.html" %}
{% endblock %}

base.html

<html>
project specific CSS
project specific JS
<body>
{% block content %}
{% endblock %}
</body>
</html>

所以实际上你的项目结构如下

project
  |
  |---pluggable
  |      |
  |      |--templates
  |      |     |
  |      |     |---cleantable.html
  |      |     |
  |      |     |---table.html
  |      |     
  |      |--views.py <renders pluggable templates>
  |  
  |---templates<site specific templates>
  |    |
  |    |---base.html<site specific design>
  |
  |---<other apps>