Python和Django的新手,我试图通过按钮点击将一些简单的ajax调用传递给我的views.py,但是,当我尝试创建一个url时,如下面的ajax代码所示,除非我在没有documentId.id
的情况下直接追加,否则"?id="
不会附加。
{%for document in documents%}
{{document.filename}}
<input type="button" id="{{document.id}}" onclick="loadData(this)" name="load-data" value="Add"/>
{%endfor%}
<script type ="text/javascript">
function loadData(documentId){
$.ajax({
url:"upload-data/load" + "?id=" + documentId.id,
data: {'documentId': documentId},
type: 'GET',
success: function(){
window.location.href = "http://127.0.0.1:8000/url/locations";
}
});
}
</script>
这给了我一个错误,说明找不到网址。我的urls.py下面有一行:
url(r^"upload-data/load/([0-9]+)/$', views.loadFile, name="load-data"),
除了这种方法之外,我对如何将数据提取到views.py感到难过。
def loadFile(request):
documentId = request.GET.get('id')
newLayer = Layer(get_object_or_404(Document, pk = documentId))
newLayer.save()
layers = Layer.objects.all()
return render(request, 'url/loaded.html', { 'layers': layers})
控制台中的持久性错误是:
http://127.0.0.1:8000/upload-data/load/ [HTTP / 1.0 404 Not Found]
答案 0 :(得分:2)
使用类似的东西:
def loadFile(request):
documentId= request.GET.get('id', '').
newLayer = Layer(get_object_or_404(Document, pk = documentId))
newLayer.save()
layers = Layer.objects.all()
return render(request, 'url/loaded.html', { 'layers': layers})
并将您的网址更新为:
url(r^"upload-data/load/', views.loadFile, name="load-data")
脚本就像:
<script type ="text/javascript">
function loadData(documentId){
$.ajax({
url:"upload-data/load/?id="+ documentId.id,
data: {'documentId': documentId},
type: 'GET',
success: function(){
window.location.href = "http://127.0.0.1:8000/url/locations";
}
});
}
</script>
感谢。
答案 1 :(得分:2)
从上面的答案和评论中,似乎不是将id作为url param
传递,而是要传递与get param
相同的内容。在这种情况下,请将您的网址设置如下。
url(r^"upload-data/load/', views.loadFile, name="load-data")
并在视图中,按replacing id with documentId
检查获取参数。文档ID将在您的dict named as data passed to view
中。因此,请查看request.GET.get('data','')
并从数据提取ID中查找
def loadFile(request):
data = request.GET.get('data', None)
if data:
documentId = data['documentId']
newLayer = Layer(get_object_or_404(Document, pk = documentId))
newLayer.save()
layers = Layer.objects.all()
return render(request, 'url/loaded.html', { 'layers': layers})
else:
return JsonResponse({'error': 'pass document id'}, status=400)
因为您从名为documentId
的javascript传递了一个get参数,而不是id。
HTH
答案 2 :(得分:1)
在JavaScript中,您需要
"upload-data/load/" + documentId.id
Django在?id=
定义url
中没有使用r^"upload-data/load/([0-9]+)/$'
。它期望即。 upload-data/load/123
代替upload-data/load?id=123
编辑,您需要id
中的def loadFile(request, id)
。
然后你不必使用request.GET.get('id')