Как отобразить шаблон в django из другого приложения, используя представления на основе классов? - PullRequest
1 голос
/ 20 марта 2020

Я чувствую, что не должен задавать тонкий вопрос, потому что это кажется слишком легким. Но я не могу найти решение в django документах или здесь.

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

Структура моей папки:

my_website
   -app1
   -app2
   -mywebsite
      -templates
         -users
            -welcome_pages
               -welcome_user.html

   -app3
     -templates
        -mytemplate.html
        -mytemplate2.html
     -views.py
     -models.py

В моем app3 у меня есть вид, который выглядит следующим образом:

class VisualizationView(StaffRequiredMixin, ListView):
    template_name = ????
    model = Project

    def get_context_data(self, **kwargs):
        print(self.get_template_names())
        context = super(VisualizationView, self).get_context_data(**kwargs)
        context['projects'] = Project.objects.all()

        return context

Так что я могу легко отрендерить шаблон сейчас в template_name, который находится в моем app3, и выплюнуть все мои объекты проекта там. Но я хочу отобразить контекст в welcome_user. html.

Обычно в документации говорится, что я должен использовать appname/templatename, но я получаю исключение TemplateDoesntExist. Я попытался передать имя шаблона:

mywebsite/welcome_user.html
mywebsite/users/welcome_pages/welcome_user.html
welcome_user.html
mywebsite/templates/users/welcome_pages/welcome_user.html

Если я распечатал self.get_template_names(), я получу только список шаблонов, которые есть в app3. Я думал, что django будет автоматически искать во всем проекте, где папка шаблона? Что мне здесь не хватает? Или это не должно работать в CBV?

Извинения, если это слишком простой вопрос и спасибо за любую помощь. Ценится!

1 Ответ

1 голос
/ 20 марта 2020

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

class VisualizationView(StaffRequiredMixin, ListView):
    <b>template_name = 'users/welcome_pages/welcome_user.html'</b>
    model = Project

    def get_context_data(self, **kwargs):
        print(self.get_template_names())
        context = super(VisualizationView, self).get_context_data(**kwargs)
        context['projects'] = Project.objects.all()

        return context

Если вы установили APP_DIRS для параметра [Django -doc] на True, таким образом, он будет искать в каталогах шаблонов приложений и в конечном итоге найдет каталог users/ в каталоге template/ вашего приложения users/ и найдет соответствующий шаблон.

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