Django中特定于应用程序的模板目录的标准?

时间:2018-11-21 14:29:27

标签: django django-templates django-settings

我想这是一个与Django开发最佳实践有关的问题。 我正在尝试使用包含多个应用程序的主页(base.html)构建Web服务。我想使这些应用程序具有独立性,因此我在每个应用程序中都建立了一个templates目录,并且还想利用Django的模板继承功能使整个过程尽可能地流畅

现在,我担心的是,应该在项目中将base.html放在哪里,以便系统知道在哪里找到它? 另外,我应该在settings.py文件中进行哪些更改,以使系统能够连接模板?有没有一种标准或已知的方法可以为这种安排花费最少的精力?

3 个答案:

答案 0 :(得分:1)

我已经看到和使用的一种常见设计模式是在您的项目中包含一个集中的“应用程序”,其中包含您希望在其他应用程序中使用的所有共享“内容”。因此,您可能具有以下目录结构:

base/
  static/
    css/
      common.css
    js/
      common.js
  templates/
    base.html
myapp1/
  urls.py
  views.py
  templates/
  ...
myapp2/
  urls.py
  views.py
  templates/
  ...
myproject/
  settings.py
  urls.py

现在,您只需像其他应用程序一样包含“基本”应用程序,然后将共享的内容放入其中即可。其他应用程序可以引用其中存在的模板,并且可以包含您可能要共享的任何常见库。

在settings.py中:

INSTALLED_APPS = ['base', 'myapp1', 'myapp2']

答案 1 :(得分:1)

为此不需要中央应用程序。 TEMPLATES设置还包括DIRS选项,该选项是将始终搜索的目录列表。因此,您可以将其设置为适当的目录-例如os.path.join(BASE_DIR, 'templates'),然后将非应用程序特定的模板(例如base.html)放在其中。

答案 2 :(得分:1)

如@danialroseman所说,您只需要更新DIRSTEMPLATES变量中的settings.py ::

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',

        ### ADD YOUR DIRECTORY HERE LIKE SO:
        'DIRS': [ os.path.join(BASE_DIR, 'templates')],
        ...

现在在项目的根文件夹中创建目录templates,并将base.html文件放入其中。