我遇到了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 .. 任何帮助将不胜感激。
答案 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更改为允许签名浮动