2014-09-10 4 views
1

Согласно Django Docs, шаблон загрузчикправильное расположение шаблонов для дженегов джанго?

шаблоны загрузки из Django приложений в файловой системе. Для каждого приложения в INSTALLED_APPS загрузчик ищет подкаталог шаблонов.

происходит:

... затем get_template ('foo.html') будет искать foo.html в этих каталогах, в следующем порядке:

/path/to/myproject/polls/templates/ 
/path/to/myproject/music/templates/ 

Итак ... внутри моего «сайт« проект, у меня есть «www "приложение. Таким образом, структура каталогов /путь/к/проект/сайт/WWW/

Я создал каталог "шаблоны" внутри "WWW", и поставить там "page_list.html" (/path/to/project/website/www/page_list.html)

приложение перечислены в "INSTALLED_APPS", но когда я пытаюсь сделать это в urls.py:

url('^$', ListView.as_view(model=Page,)) 

я получаю "TemplateDoesNotExist", и ошибка говорит, что django.template.loaders.app_directories.Loader ищет "/path/to/project/website/templates/www/page_list.html" или /path/to/project/website/www/templates/www/page_list.html

Если я ставлю шаблон внутри сайта/WWW/шаблоны/WWW, это работает ... но мне интересно, почему это работает таким образом. Это кажется абсурдным, чтобы иметь шаблонов папки внутри папки приложения, а затем есть еще один друг с именем в качестве приложения внутри шаблонов каталога ....

И документация говорит, что следует искать внутри проект/приложение/шаблоны ... у меня есть

TEMPLATE_DIRS = [os.path.join(BASE_DIR, 'templates')] 

Хотя документы для app_directories.Loader не говорите, что вам это нужно (а также попытался удалить этот параметр).

Что происходит? Есть ли что-то, что я делаю неправильно? Это что-то вроде общих представлений, или есть что-то еще?

ответ

3

Ваша проблема заключается в автоматическом назначении имен шаблонов Django, основанных на классе. Если вы используете django.views.generic.ListView, вы получили MultipleObjectTemplateResponseMixin, который создает ваше имя шаблона www/poll_list.html. Это имя объединяется с префиксом, генерируемым app_directory Loader, поэтому вы получили /path/to/project/app/templates/www/poll_list.html.

вас, если вы не хотите, чтобы это у вас есть другой вариант (в таком порядке):

  • Используйте TEMPLATE_NAME аргумент или атрибут в вашем представлении.
  • Подкласс MultipleObjectTemplateResponseMixin и удалите префикс приложения. Затем смешайте его в своих взглядах.
  • Не используйте загрузчик app_directory.
+0

Большое спасибо. Это проясняет ситуацию. – yivi