Javascript 在Django中通过AJAX调用python函数

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

我通过AJAX发送一个请求,点击按钮(其
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)
    })
  }