1

我正在使用 Django 站点。我希望能够拥有特定于站点的模板和静态文件。

我当前的目录结构是:

├── site_a
│   ├── __init__.py
│   ├── settings.py
│   ├── urls.py
│   ├── views.py
│   └── wsgi.py
├── site_b
│   ├── __init__.py
│   ├── settings.py
│   ├── urls.py
│   ├── views.py
│   └── wsgi.py
└── templates
    ├── site_a
    │   ├── _navbar.html
    │   ├── home.html
    │   └── signup.html
    └── site_b
        ├── _navbar.html
        ├── home.html
        └── signup.html

我知道如果我在 INSTALLED_APPS 中将模板声明为应用程序,我可以在 site_x 目录中移动模板。是否有另一种方法告诉 Django 在 site_a/templates 中使用模板而不将 site_a 声明为应用程序?

此外,我还希望有未放置在项目 STATIC_ROOT 中的特定于站点的静态文件,以便我的树实际上看起来像:

.
├── site_a
│   ├── __init__.py
│   ├── settings.py
│   ├── static
│   │   ├── css
│   │   └── js
│   ├── templates
│   │   ├── _navbar.html
│   │   └── home.html
│   ├── urls.py
│   ├── views.py
│   └── wsgi.py
└── site_b
    ├── __init__.py
    ├── settings.py
    ├── static
    │   ├── css
    │   └── js
    ├── templates
    │   ├── _navbar.html
    │   └── home.html
    ├── urls.py
    ├── views.py
    └── wsgi.py
4

1 回答 1

1

STATICFILES_DIRS您可以通过(Django Docs)设置静态文件而无需声明 site_a

STATICFILES_DIRS = (
    os.path.join(BASE_DIR, 'static'),
    ('site_a', os.path.join(BASE_DIR, 'site_a/static')),
    'Full path to your file or directory'
)

在模板中:

<script src="{% static 'site_a/js/my_site_a.js' %}" type="text/javascript"></script>

并声明您的应用程序:

将您的静态文件( Django Docs ) 存储在应用程序中名为 static 的文件夹中:site_a/static/site_a/example.jpg.

对于模板相同:site_a/templates/site_a/example.html

在您的 settings.py 集中APP_DIRS

TEMPLATES = [
    {
        ...,
        'APP_DIRS': True,
        ...
    },
]

请参阅对模板引擎的支持覆盖模板

APP_DIRS告诉引擎是否应该在已安装的应用程序中查找模板。每个后端为应存储其模板的应用程序内的子目录定义一个常规名称。

于 2021-03-11T10:29:17.603 回答