【发布时间】:2016-08-25 17:56:58
【问题描述】:
我有一个问题,它演变了一个脚本:“script.py”和 django 项目中“views.py”中的一个视图。 目标是在页面中显示一个问题:“Pregunta”和一个选项列表:“Opciones” 在脚本的一部分中,我需要以这种方式调用视图的函数“Menu_Opciones”:
ESI_App.views.Menu_Opciones(request, Pregunta, Opciones)
在views.py中我有这样定义的函数:
def Menu_Opciones(request, Pregunta, Opciones):
for i in range(len(Opciones)):
ModelOpciones.objects.create(opciones=Opciones[i])
form = OpcionesForm(request.POST or None, field1_qs = ModelOpciones.objects.all())
context = {
'pregunta': Pregunta,
'form': form,
}
if form.is_valid():
opcion = form.cleaned_data['Campo_Opciones']
return render(request, "Menu_op.html", context)
这是回溯:
Environment:
Request Method: GET
Request URL: http://127.0.0.1:8000/Menu_Opciones/
Django Version: 1.9.7
Python Version: 3.4.3
Installed Applications:
['django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'ESI_App']
Installed Middleware:
['django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware']
Traceback:
File "C:\Users\Miguel\Desktop\VenvProyecto\lib\site-packages\django\core\handlers\base.py" in get_response
149. response = self.process_exception_by_middleware(e, request)
File "C:\Users\Miguel\Desktop\VenvProyecto\lib\site-packages\django\core\handlers\base.py" in get_response
147. response = wrapped_callback(request, *callback_args, **callback_kwargs)
Exception Type: TypeError at /Menu_Opciones/
Exception Value: Menu_Opciones() missing 2 required positional arguments: 'Pregunta' and 'Opciones'
更多信息:我在更换计算机后出现此错误,但我创建了一个新的项目和应用程序,复制了代码,修改了所有路径、项目文件和文件夹名称、应用程序名称、设置.. . 小心。
如您所见,我使用这 3 个参数调用该函数,但我无法想象为什么会出现该错误。请帮我一把。 提前致谢。
【问题讨论】:
-
“我用这 3 个参数调用函数。”你确定吗?看起来您只是在调用
http://127.0.0.1:8000/Menu_Opciones/。我在该 URL 中看不到任何可以传递给您的视图的内容。 -
Hello @nofinator ,Menu_Opciones() 是一个“views.py”函数,它有两个参数:“Pregunta”和“Opciones”,我从脚本中这样调用这个视图:ESI_App.views .Menu_Opciones(request, Pregunta, Opciones) 对不起,我没听懂你的回答
-
脚本中的调用看起来是正确的,因为它在请求后有 2 个参数。但是,在您上面的回溯中,看起来 Django 正在响应您所做的 URL 调用,在
/Menu_Opciones/之后似乎没有任何内容。你是如何运行你的脚本的? -
我给你解释一下程序流程:1º我在index页面展示一个表格,(urlpattern:
url(r'^$', 'ESI_App.views.inicio', name='inicio'),)(view: def inicio(request):)2º 我通过 request.POST 方法得到一个文本变量。 3º 在视图的函数内部,我在“script.py”中调用主函数: (solution = main(request, text_variable)) 4º 在主函数内部,我这样调用视图:ESI_App.views.Menu_Opciones(request, Pregunta, Opciones)并询问 wiew 的功能:(def Menu_Opciones(request, Pregunta, Opciones):) 在 Menu_Op.html 中显示菜单 -
...我继续:(urlpattern =
url(r'^Menu_Opciones/$', 'ESI_App.views.Menu_Opciones', name='Menu_Opciones'),)。然后我的意图是自动从'inicio'重定向到'Menu_Opciones',通过request.POST选择一个选项并处理它并显示最终答案,但我会尝试自己获得下一个。感谢@nofinator 的回答,我希望我解释得足够清楚:)
标签: python django parameters arguments views