视图类中的Django渲染模板

时间:2019-06-09 14:49:57

标签: python django

为了进一步理解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 个答案:

答案 0 :(得分:2)

这里有两个问题:

  1. 您不应在template_name前面添加斜杠;和
  2. 您忘了指定return语句:
class Index(TemplateView):
    template_name = "login/index.html"

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

话虽这么说,TemplateView [Django-doc]实际上已经实现了渲染逻辑本身。用于忽略样板逻辑。

如果要在TemplateView中添加上下文数据,则需要覆盖get_context_data(..) method [Django-doc]

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

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

我们在此处使用模板渲染的上下文中添加了一个额外的变量some_variable