为什么Django视图调用render时报错name 'request' is not defined
问题原因
- 你对
render方法的参数逻辑存在误解:render方法所需的request参数不是导入render模块时自带的,是Django路由匹配到对应视图函数时,主动传递给视图函数的第一个位置参数,你需要先在视图函数的参数定义中接收这个参数,才能在函数内部调用。 - 你当前的
home_view只定义了*args, **kwargs来接收参数,没有将第一个位置参数命名为request,所以函数内部找不到request变量,触发NameError。
修复方法
推荐使用Django视图的标准写法,显式将第一个参数声明为request:
from django.http import HttpResponse from django.shortcuts import render # Create your views here. def construction_view(request, *args, **kwargs): return HttpResponse("<h1> This site is currently being constructed. Please check back later </h1>") def home_view(request, *args, **kwargs): return render(request, "home.html", {})
如果你确实需要保留*args的写法不做显式声明,可以从args中取出第一个参数作为request对象(不推荐,可读性差):
def home_view(*args, **kwargs): request = args[0] return render(request, "home.html", {})
内容的提问来源于stack exchange,提问作者SourOddity
相关产品推荐
相关产品推荐

