为了进一步理解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
我在这里缺少什么概念?
答案 0 :(得分:2)
这里有两个问题:
template_name
前面添加斜杠;和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
。