Django: извлечение шаблона из параллельного каталога

#django #django-templates

#django #django-шаблоны

Вопрос:

в моем проекте моя папка шаблонов выглядит следующим образом. В обеих папках у меня есть шаблон с именем results.html

 templates
    |--customer_site
    |       |--results.html
    |
    |backoffice
            |--results.html
  

для сайта, ориентированного на клиента, мой файл настроек содержит

 TEMPLATES = [{
...
    'DIRS': ['templates/customer_site'],
}]
  

в одной конкретной функции на сайте, ориентированном на клиента, мне нужно получить доступ к шаблону с именем results.html который находится в бэк-офисе.

 def some_function(request):
    ....
    ....
    return render(request, 'results.html')
  

это возвращает results.html страница сайта, ориентированного на клиента, но я хочу, чтобы results.html страница доступна в папке backoffice.

Комментарии:

1. почему бы просто не установить DIRS маршрут в качестве шаблонов вместо этого? вот почему вы можете просто указать /backoffice/results.html на свой взгляд

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

Ответ №1:

Метод 1: вы можете либо установить свой статический маршрут к основной папке templates (это стандартный способ выполнения и то, что я предпочитаю):

 TEMPLATES = [{
...
    'DIRS': ['templates'],
}]
  

И, по вашему мнению:

   //modify other views to use customer_site/results.html 
  return render(request, 'backoffice/results.html')
  

Метод 2:
добавьте другую папку path в каталоги:

  'DIRS': [
            'templates/customer_site',
            'templates/backoffice'
        ],
  

чтобы это сработало, вам нужно изменить results.html имя вашего файла в backoffice, чтобы оно не совпадало с именем в customer_site . Измените его на что-то вроде backoffice_results.html

поэтому, если он не может найти from templates/customer_site , он перейдет к следующему template_dirs

 return render(request, 'backoffice_results.html')
  

Комментарии:

1. это то, что я изначально пытался, но по какой-то причине это выдает ошибку с указанием «TemplateDoesNotExist»

2. @IrfanHarun я обновил метод 2 на другой способ сделать это

3. Спасибо, в итоге я использовал метод 2, и он работал просто отлично.