我正在使用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
您可以通过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
在您的设置中。py设置APP_DIRS
:
TEMPLATES = [
{
...,
'APP_DIRS': True,
...
},
]
请参阅支持模板引擎和覆盖模板:
APP_DIRS告诉引擎是否应该在已安装的应用程序中查找模板。每个后端为定义一个常规名称应用程序中模板所在的子目录存储。