Шаблон рендеринга Django в классе представления - PullRequest
1 голос
/ 09 июня 2019

В попытке лучше понять структуру Django, я пишу небольшой тестовый пример. Имя приложения «логин», и я определил следующее:

urls.py:

from django.urls import path

from .views import Index

urlpatterns = [
    path('', Index.as_view(), name='index')
]

views.py:

from django.shortcuts import render
from django.views.generic import TemplateView


class Index(TemplateView):
    template_name = "/login/index.html"

    def get(self, request):
        render(request, self.template_name, None)

Проблема с загрузкой страницы:

TemplateDoesNotExist at /login/

index.html находится в папке приложения входа в систему:

/login/templates/login/index.html

Какие понятия я здесь упускаю?

1 Ответ

2 голосов
/ 09 июня 2019

Здесь есть две проблемы:

  1. Вы не должны добавлять начальную косую черту к template_name
  2. вы забыли указать оператор return:
class Index(TemplateView):
    template_name = <b>"login/index.html"</b>

    def get(self, request):
        <b>return</b> render(request, self.template_name, None)

При этом, TemplateView [Django-doc] фактически уже реализует саму логику рендеринга.Он используется для исключения стандартной логики.

Если вы хотите добавить контекстные данные в TemplateView, вам необходимо переопределить метод get_context_data(..) [Django-doc] :

class Index(TemplateView):
    template_name = 'login/index.html'

    def <b>get_context_data</b>(self, **kwargs):
        context = super().get_context_data()
        context['some_variable'] = 42
        return context

Здесь мы добавили дополнительную переменную some_variable в контекст, который мы визуализируем с помощью шаблона.

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