如何将参数“request”从脚本传递给视图的函数?

时间:2016-08-10 09:41:42

标签: python django view parameters request

我有一个假装在我的网站上创建表单并接收响应的脚本,我们称之为script.py。 该脚本需要调用views.py中的函数:

opc = newproject.views.Menu_Options(request, ask, Options)

此函数需要使用request.POST,因此需要接收“request”作为参数。 问题是: Script.py不知道什么是“请求”。我导入了这个:

import newproject.views
import django
from django.http import request

我运行了项目但是忽略了参数“request”并在这一行中给了我一个错误:

opc = newproject.views.Menu_Options(ask, Options)


Exception Type: TypeError at /
Exception Value: Menu_Opctions() missing 1 required positional argument:     'Options'

我输入了“错误的请求”吗? 在views.py中是否有任何其他方法可以在函数中导入对象“请求”而不将其作为参数传递? 提前致谢! :)

2 个答案:

答案 0 :(得分:2)

导入from django.http import request只需导入模块django.http.request,当您调用request方法时,它不会神奇地传递Menu_Options

您可以按如下方式构建虚假请求对象:

from django.http import HttpRequest

fake_request = HttpRequest()
fake_request.method = 'post'
fake_request.POST['foo'] = bar

# call the view with your fake request
opc = newproject.views.Menu_Options(fake_request, ask, Options)

然而,这非常hacky。您的脚本不应该创建虚假的请求对象。 Menu_Options视图中可能存在一些常见功能,您应该将其分解为单独的方法。然后您的视图和脚本都可以调用新方法,但脚本不必创建伪请求对象。

答案 1 :(得分:0)

我修好了!我意识到当我调用脚本主要功能时,我忘记传递“request”参数。这就是为什么我的外部脚本“不知道”是什么“请求”。