Django视图返回HttpRequest触发TypeError:__init__()参数不匹配
解决Django 2.0中TypeError: init() takes 1 positional argument but 2 were given的问题
嘿,我一眼就瞅出问题所在了——你在视图函数里犯了个典型的新手错误:返回了HttpRequest对象,但这根本不是视图该返回的东西!
错误原因拆解
Django的视图函数逻辑是这样的:
- Django会把用户的请求包装成
HttpRequest实例,作为参数传给你的视图函数(就是你写的request参数) - 而视图函数的职责是处理这个请求,然后返回一个响应对象,也就是
HttpResponse(或它的子类,比如JsonResponse)
你现在返回HttpRequest('Hello Ahmed'),相当于错误地实例化了请求对象,而HttpRequest的构造函数在Django 2.0里需要的参数不止你传的这一个,所以才会抛出这个“参数不匹配”的TypeError。
修正后的代码
第一步:修正views.py
你需要导入HttpResponse,然后返回这个响应对象:
from django.http import HttpResponse # 必须导入这个! def index(request): return HttpResponse('Hello Ahmed')
第二步:确认urls.py配置
你的urls.py配置是完全正确的,不用修改:
from django.contrib import admin from django.urls import path from first_app import views urlpatterns = [ path('', views.index, name='index'), path('admin/', admin.site.urls), ]
最后一步
重启你的Django开发服务器,再访问http://127.0.0.1:8000/,就能正常看到"Hello Ahmed"的输出啦!
内容的提问来源于stack exchange,提问作者Roma
相关产品推荐
相关产品推荐

