Перевожу тут один проект частично на CBV, столкнулся с таким вопросом.
Исторически сложилось, что шаблоны лежат в папке app_name/html/шаблон.html
В сеттингах так:
'DIRS': [os.path.join(BASE_DIR, 'templates'), 'html'],
'APP_DIRS': True,
Если красиво указывать в template_name модели чисто имя файла 'foos_list.html', то django ищет в:
/templates/foos_list.html
/html/foos_list.html
.../site-packages/django/contrib/admin/templates/foos_list.html
.../site-packages/django/contrib/auth/templates/foos_list.html
/{app_name}/templates/foos_list.html
/templates/{app_name}/{class_name}_list.html
/html/{app_name}/{class_name}_list.html
.../site-packages/django/contrib/admin/templates/{app_name}/{class_name}_list.html
.../site-packages/django/contrib/auth/templates/{app_name}/{class_name}_list.html
/class_name/templates/{app_name}/{class_name}_list.html
Если 'APP_DIRS': False , то поиск попроще:
/templates/foo_list.html
/html/foo_list.html
/templates/{app_name}/{class_name}_list.html
/html/{app_name}/{class_name}_list.html
В любом случае, так чтобы {app_name}/html = так из коробки не вышло. А хотелось бы сохранить. Ну вот по папкам раскладывать очень не хочется.
Я не придумал пока ничего умнее, чем переопределить DetailView и ListView, создав класс и уже наследоваться от него:
class MyListView(ListView):
def __init__(self):
if self.template_name:
super(MyListView, self)
self.template_name = '{}/html/{}'.format(self.model._meta.app_label, self.template_name)
Зря велосипед делал или все же это таки простой и нормальный выход из положения?
Updated 29 Sept. 2017, 11:59 by Ski.