Скажите django для поиска вложенных папок шаблона приложения
у меня есть следующая структура папок для шаблонов в моем приложении django:
templates/
app/
model1/
model1_form.html
model2/
model2_form.html
предположим, я использую model1 и общий ListView, прямо сейчас он ищет только в шаблонах / app / model1_form.формат html. В любом случае, я могу сказать django, что он также должен искать приложения/ подпапки? Я не хочу устанавливать имя шаблона и путь вручную (template_name="templates/app/model1/model1_form.html"
).
At settings.py у меня:
import os.path
BASE_PATH = os.path.dirname(os.path.dirname(__file__))
TEMPLATE_DIRS = (
BASE_PATH+'/templates/',
)
вот мой взгляд:
class HousesListView(ListView):
model = House
context_object_name = "house_list"
спасибо вперед!
4 ответов
вам нужно добавить django.template.loaders.app_directories.Loader
to TEMPLATE_LOADERS
(если уже не).
TEMPLATE_LOADERS = (
'django.template.loaders.filesystem.Loader',
'django.template.loaders.app_directories.Loader',
)
затем измените структуру папок так, чтобы у вас была папка" шаблоны " в каталоге приложения:
- <project_root>
- app
- templates
- model1
- model2
или правильно пространство имен моделей, чтобы они не конфликтовали с другими именами приложений случайно:
- <project_root>
- app
- templates
- app
- model1
- model2
другие ответы были правильными в то время, но для тех, кто сталкивается с этим сейчас, вот как это делается в Django 1.8+
по умолчанию Django теперь ищет шаблоны в папках приложений. На это указывает 'APP_DIRS': True,
на TEMPLATES
настройки вроде этого:
TEMPLATES = [
{
...
'DIRS': ['templates'],
'APP_DIRS': True,
...
},
]
как показывают другие ответы, вы все равно должны использовать appname/templates/appname/model1_form.html
в пространстве имен шаблоны
( подробнее: https://docs.djangoproject.com/en/1.8/intro/tutorial03/#write-views-that-actually-do-something в поле "пространство имен шаблонов")
последняя проверка: убедитесь, что приложение, которое вы используете в INSTALLED_APPS
Кортеж, так как это была проблема, с которой я столкнулся.
Я думаю, что использовать шаблоны из папки, как правило, вы должны либо:
вручную укажите путь к шаблону как
subdir/template.html
например. render_to_response ('sub/dir / template.html') или template_name='...'-
определите все подпапки в
TEMPLATE_DIRS
например.TEMPLATE_DIRS = (
BASE_PATH+ ' / templates/',
BASE_PATH+ '/ templates / app',
BASE_PATH+ '/ templates / app / model1',
)но потому, что общие представления, кроме шаблонов, которые можно найти в app_name / template.формат html, вам нужно будет переместить шаблоны, чтобы добавить
/path/to/templates/app/model1
в TEMPLATE_DIRS и переместите шаблоны вtemplates/your_app/model/your_app/model_template.html
, что немного неудобно.
С Django 2.0 даже не нужно ничего менять в TEMPLATES
переменная settings.py
.
Единственное требование-добавить appname.apps.AppnameConfig
(например,каталог.приложения.CatalogConfig для приложения с именем 'каталог') к INSTALLED_APPS
список, затем django будет искать под appname / templates при поиске шаблонов.