Получить шаблоны другого приложения в Django - PullRequest
4 голосов
/ 23 декабря 2010

Это структура моего сайта:

mysite
    app_a
       templates
           a.html
    app_b
       templates
           b.html
       views.py

В views.py я хочу получить a.html,

Поэтому я использую это:

return render_to_response('app_a/a.html')

но выдает ошибку:

TemplateDoesNotExist 

Что мне нужно сделать?

Ответы [ 3 ]

6 голосов
/ 23 декабря 2010

просто используйте render_to_response ('a.html')

Предполагается, что у вас установлены загрузчики шаблонов каталогов приложений по умолчанию, проблема в том, что путь к шаблону на самом деле a.html

Итак, в вашем текущем формате вы бы написали a.html, а не app_a/a.html

Рекомендуемый формат для каталогов шаблонов:

mysite
    app_a
       templates
           app_a
               a.html
    app_b
       templates
           app_b
               b.html
       views.py

    global_templates
       app_b
            b.html

, который будет работать с вашим примером app_a/a.html

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

Вы можете легко получить конфликтующие имена шаблонов, если все файлы находятся непосредственно в каталоге шаблонов приложения.

1 голос
/ 23 декабря 2010

Помимо настроек TEMPLATE_DIRS, попробуйте добавить django.template.loaders.app_directories.Loader к настройке TEMPLATE_LOADERS, так как это сделает доступными все шаблоны для приложений в вашем INSTALLED_APPS. Таким образом, вам не нужно помещать их все в один главный каталог.

См. Документацию Django для загрузчиков шаблонов

1 голос
/ 23 декабря 2010

Вы можете указать переменную TEMPLATE_DIRS в settings.py, которая является кортежем каталогов, в которых ищутся шаблоны.Если вы добавите каталог шаблонов из обоих приложений в TEMPLATE_DIRS, все будет в порядке (просто следите за конфликтами в пути поиска).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...