Javascript 在Django中通过AJAX调用python函数
我通过AJAX发送一个请求,点击按钮(其Javascript 在Django中通过AJAX调用python函数,javascript,python,django,ajax,Javascript,Python,Django,Ajax,我通过AJAX发送一个请求,点击按钮(其id=“transcript”)触发一个名为transcript的函数 AJAX document.querySelector('#transcript').addEventListener('click',()=>{ fetch(`transcript/${CNIC}`); 视图.py def成绩单(请求,cnic): form=转录本form() 返回呈现(请求“certificates/transcripts.html”{ “形式”:形式, “cn
id=“transcript”
)触发一个名为transcript
的函数
AJAX
document.querySelector('#transcript').addEventListener('click',()=>{
fetch(`transcript/${CNIC}`);
视图.py
def成绩单(请求,cnic):
form=转录本form()
返回呈现(请求“certificates/transcripts.html”{
“形式”:形式,
“cnic”:cnic
})
fetch请求工作正常,但新页面(即transcripts.html
)无法呈现。我必须手动键入URL以更新视图。为什么会发生这种情况,有人能解释一下吗
控制台中的输出:
views.js:62 Fetch finished loading: GET "http://127.0.0.1:8000/transcript/1530660001979".
您不能以这种方式重定向用户,但您可以在后端成功响应后在js中重定向用户: template.html:
<!-- set the csrf token as a variable, then include script.js -->
<script> var csrf_token = "{{ csrf_token }}" </script>
<script src="{% static 'script.js' %}"></script>
views.py:
def transcript(request):
# unpack request:
frontend_value = request.POST['frontend_key']
...
# do something:
....
# pack response:
response = json.dumps({
'backend_key' : 'backend_value',
})
return HttpResponse(response)
一个例子
views.py
def returnSubCategories(request):
category_request = request.GET.get('category',None)
print(request.GET.get('category',None))
subcategories = SubCategories.objects.filter(category=category_request).values()
subcategories_list = list(subcategories)
return JsonResponse(subcategories_list,safe=False)
url.py
url(r'^ajax/obtenersubcate/$',views.returnSubCategories,name='regresasubcategorias'),
代码js
$("#button").on('click',function(e){
e.preventDefault();
getList();
});
function getList() {
axios({
method:'get',
url:'{% url "anuncios:regresasubcategorias" %}',
params:{'category':1},
responseType:'json'
})
.then(function(response){
console.log(response);
})
.catch(function(error){
console.log(error)
})
}
感谢您的回复。我可以不使用
render
而使用HttpRespone
吗?因为我想发送transcripts.html
中的表单
?使用json.dumps
的键和值的示例是什么?您可以使用一个视图函数呈现表单并执行ajax请求另一个。否则可能有一些django视图类可以在一个类中同时执行这两个操作。请您解释一下ajax代码在您的答案中的作用,以及视图函数中的“键”和“值”应该是什么,以了解基本原理?我正在尝试了解如何使用此方法呈现新页面。我我已经详细阐述了我的答案,如果你需要更多细节,请告诉我。
$("#button").on('click',function(e){
e.preventDefault();
getList();
});
function getList() {
axios({
method:'get',
url:'{% url "anuncios:regresasubcategorias" %}',
params:{'category':1},
responseType:'json'
})
.then(function(response){
console.log(response);
})
.catch(function(error){
console.log(error)
})
}