Django- TypeError 使用 URL 和多个参数
Django- TypeError using URL with multiple args
我在使用 Django URL-View 系统时遇到问题。我一直在尝试一种观点:
#views.py...
def IsolatedForm(request, lat, lng, slug):
if not request.user.is_authenticated():
return redirect('login')
chosen_form = Form.objects.filter(slug=slug)
return render(request, 'polls/isolatedform.html', {'chosen_form':chosen_form, 'lng': lng, 'lat': lat})
我将它与一个 URL 模式相关联,该模式采用几个浮点数(坐标值)和一个 slug:
#urls.py...
url(r'^testing/(-?\d+\.\d+),(-?\d+\.\d+)/(?P<slug>.*)/$', views.IsolatedForm, name='isolatedform'),
当我尝试这个 URL 模式时,例如(应用程序名称是 polls):
polls/testing/1.0,-1.0/postchaos/
(其中 "postchaos" 是对应于现有表单的示例 slug)我得到:
TypeError at /polls/testing/1.0,-1.0/postchaos/ IsolatedForm() takes
exactly 4 arguments (2 given)
我无法意识到实际问题是什么,因为我试过的 URL 包含预期的数字和预期的 slug。
任何帮助将不胜感激。
您必须为变量命名。
URL 无法理解 "lat" 和 "lng" 变量,因此无法将它们传递给视图。
尝试更正它们,例如:
url(r'^testing/(?P<lat>\w+)/(?P<lng>\w+)/(?P<slug>.*)/$', views.IsolatedForm, name='isolatedform'),
请记住,所有捕获的参数始终是字符串,您应该在视图中验证它们。
与此同时,我在 Stack Overflow 上找到了其他几个答案,这些答案使得解决问题成为可能,同时还将 lat/lng 参数限制为以逗号分隔的浮点数:
命名类浮点参数:
还有一个更好的 slug 正则表达式:
这是有效的模式:
url(r'^testing/(?P<lat>[+-]?(\d*\.)?\d+),(?P<lng>[+-]?(\d*\.)?\d+)/(?P<slug>[\w-]+)/$', views.IsolatedForm, name='isolatedform'),
另外,尽管@jgmh 的回答没有解决不遵守我的约束的问题,但关于命名值的提示很有帮助。谢谢
编辑:更改 RegEx 以允许带符号的浮点数
我在使用 Django URL-View 系统时遇到问题。我一直在尝试一种观点:
#views.py...
def IsolatedForm(request, lat, lng, slug):
if not request.user.is_authenticated():
return redirect('login')
chosen_form = Form.objects.filter(slug=slug)
return render(request, 'polls/isolatedform.html', {'chosen_form':chosen_form, 'lng': lng, 'lat': lat})
我将它与一个 URL 模式相关联,该模式采用几个浮点数(坐标值)和一个 slug:
#urls.py...
url(r'^testing/(-?\d+\.\d+),(-?\d+\.\d+)/(?P<slug>.*)/$', views.IsolatedForm, name='isolatedform'),
当我尝试这个 URL 模式时,例如(应用程序名称是 polls):
polls/testing/1.0,-1.0/postchaos/
(其中 "postchaos" 是对应于现有表单的示例 slug)我得到:
TypeError at /polls/testing/1.0,-1.0/postchaos/ IsolatedForm() takes exactly 4 arguments (2 given)
我无法意识到实际问题是什么,因为我试过的 URL 包含预期的数字和预期的 slug。 任何帮助将不胜感激。
您必须为变量命名。 URL 无法理解 "lat" 和 "lng" 变量,因此无法将它们传递给视图。 尝试更正它们,例如:
url(r'^testing/(?P<lat>\w+)/(?P<lng>\w+)/(?P<slug>.*)/$', views.IsolatedForm, name='isolatedform'),
请记住,所有捕获的参数始终是字符串,您应该在视图中验证它们。
与此同时,我在 Stack Overflow 上找到了其他几个答案,这些答案使得解决问题成为可能,同时还将 lat/lng 参数限制为以逗号分隔的浮点数:
命名类浮点参数:
还有一个更好的 slug 正则表达式:
这是有效的模式:
url(r'^testing/(?P<lat>[+-]?(\d*\.)?\d+),(?P<lng>[+-]?(\d*\.)?\d+)/(?P<slug>[\w-]+)/$', views.IsolatedForm, name='isolatedform'),
另外,尽管@jgmh 的回答没有解决不遵守我的约束的问题,但关于命名值的提示很有帮助。谢谢
编辑:更改 RegEx 以允许带符号的浮点数