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

Standard for application-specific template directories in Django?

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

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

我见过并使用过的一种常见设计模式是将集中式 "app" 作为项目的一部分,其中包含您希望在其他应用程序中使用的所有共享 "stuff"。所以你可能有以下目录结构:

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

现在您只需像其他任何应用程序一样包含 "base" 应用程序,然后将共享内容放入其中。其他应用程序可以引用存在于其中的模板,并且可以包含您可能想要共享的任何公共库。

在settings.py中:

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

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

您可以将templates文件夹放在项目文件夹中(即文件夹包含settings.py)。

正如@danialroseman 所说,您只需要更新settings.py 中的TEMPLATES 变量中的DIRS。让项目文件夹为myproject(即文件夹包含settings.py)::

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

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

您不需要创建单独的应用程序。