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 以允许带符号的浮点数