Django- TypeError使用带有多个args的URL

时间:2017-06-13 00:50:43

标签: python regex django django-views django-urls

我遇到了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})

我将它与一个带有几个浮点数(坐标值)和一个slug的URL模式相关联:

#urls.py...
url(r'^testing/(-?\d+\.\d+),(-?\d+\.\d+)/(?P<slug>.*)/$', views.IsolatedForm, name='isolatedform'),

当我尝试使用此URL模式时(例如,应用程序名称为polls):

  

轮询/检测/ 1.0,-1.0 / postchaos /

(其中“postchaos”是一个与现有表格相对应的示例slug)我得到:

  

/polls/testing/1.0,-1.0/postchaos/ IsolatedForm()中的TypeError需要   正好4个参数(2个给定)

我无法意识到实际问题是什么,因为我尝试过的网址包含预期的数字和预期的slu .. 任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:1)

您必须为变量命名。 URL无法理解“lat”和“lng”变量,因此无法将它们传递给视图。 尝试纠正它们,例如:

url(r'^testing/(?P<lat>\w+)/(?P<lng>\w+)/(?P<slug>.*)/$', views.IsolatedForm, name='isolatedform'),

请记住,所有捕获的参数都是字符串,您应该在视图中验证它们。

答案 1 :(得分:0)

与此同时,我在Stack Overflow上找到了其他一些答案,这使得解决问题成为可能,同时还将lat / lng参数限制为以逗号分隔的浮点数:

命名类似浮点数的参数:https://stackoverflow.com/a/1128740/6857994

更好的Regx for the slug:https://stackoverflow.com/a/15080420/6857994

这是有效的模式:

ORDER BY

此外,尽管@jgmh的回答没有解决不遵守约束的问题,但关于命名值的提示是有帮助的。感谢

编辑:RegEx更改为允许签名浮动