Django视图报AttributeError:urllib.request无META属性如何解决
错误原因
报错由命名冲突+传参错误共同导致:
- 代码多余导入
urllib.request模块,导入生成的request变量和Django视图需要接收的请求对象参数重名,产生变量覆盖 - Django的
render()函数第一个参数必须是框架传入的HttpRequest实例,该实例自带META属性;但代码中传给render的是urllib的request模块,模块本身不存在META属性,直接触发AttributeError。
问题代码
from django.shortcuts import render from django.http import HttpResponse from urllib import request # 多余错误导入,触发命名冲突 def homepage(*args,**kwargs): return render(request,'home.html') # 传入的是urllib模块而非Django请求对象 # Create your views here. def requestpage(*args,**kwargs): return render(request,'req.html') # 存在同上的传参错误
修复方法
- 删除无意义的
from urllib import request导入,当前视图逻辑完全不需要用到urllib库能力。如果后续确实需要使用urllib的request功能,导入时必须起别名避免重名,参考写法:from urllib import request as urllib_request - 调整视图函数参数写法,显式接收Django框架自动传入的HttpRequest请求对象,将正确的请求实例传给render函数,不要使用
*args,**kwargs的模糊传参写法。
修复后的可运行代码:
from django.shortcuts import render from django.http import HttpResponse def homepage(request): return render(request, 'home.html') # Create your views here. def requestpage(request): return render(request, 'req.html')
内容的提问来源于stack exchange,提问作者adi
相关产品推荐
相关产品推荐

