Django视图接收request、response参数提示缺少response参数报错
报错核心原因
- Django路由匹配到视图后,只会向视图函数传入*HTTP请求对象
request*这一个固定位置参数,不会自动传入response对象,你给figure视图定义的第二个response形参没有传入来源,是触发「缺少位置参数」报错的直接原因。 - 你对
render()函数的用法存在误解:render的第一个参数要求传入request对象,函数内部会自动构造返回的HttpResponse对象,不需要提前手动传入response实例。 - 模板中form的
action路径写法错误,Django的表单提交地址必须匹配路由配置的访问路径,不能写本地py文件的磁盘路径。 - 现有高版本Django的
render已经内置了RequestContext上下文处理逻辑,不需要手动传入RequestContext(request),冗余传参可能引发其他兼容问题。
修复步骤
- 修正
views.py中的视图代码,删除多余的response形参,调整render传参:
def figure(request): print("request ->", request) figures = add_data_to_class(request) figures_dict = [] for figure in figures: figures_dict.append({ "date":figure.date, "price_new":figure.price_new, "price_used":figure.price_used, }) print(figures_dict) context = {"figures":figures_dict} return render(request, "app1/figure_data_page.html", context)
urls.py现有配置无问题,无需修改,保持原有配置即可:
from django.urls import path from . import views urlpatterns = [ path('', views.figure, name="figure") ]
- 修正模板中form的配置,替换错误的action路径,补充POST表单必需的csrf令牌,给输入框加name属性否则后端无法接收提交的参数:
<form action="{% url 'figure' %}" method="post" id="figure_choice_form"> {% csrf_token %} <label for="id">Enter ID</label> <input type="text" id="id" name="id"> </form>
内容的提问来源于stack exchange,提问作者logan_9997
相关产品推荐
相关产品推荐

