带有 ajax 请求的 Django

Django with ajax Request

我有以下代码

function OpenModal()
{
 var fname="Quartz";
 var mname="Rohit";
 var lname="Patel";

 var url="{% url 'display_modal' %}"+fname +"/"+mname+"/"+lname;
 alert(url);
    xmlhttp = new XMLHttpRequest();
    xmlhttp.onreadystatechange = function() {
        if (this.readyState == 4 && this.status == 200) {
            document.getElementById('divcontent').innerHTML=this.responseText;
        }
    };
    xmlhttp.open("GET",url,true);
    xmlhttp.send();
}

如何在django 模板语言中点击按钮执行上面的代码。 url 就像

path('member/search/',
         views.displayModalView, name="display_modal"),

我认为您可以在普通的 click() 方法中使用 jQuery Ajax 请求,如下所述:W3C Documentation

但是,在这种情况下,我认为您必须将 url 声明为 TemplateAsView,这样您就可以知道Django 立即 return 模板而不是执行 Django 视图,如 doc. In the template you can execute the function, as you wish, for example in the template you can insert a call to your function on document ready, and execute when the DOM is loaded, as described here.

中所述

要做到这一点,您必须更改 url,因为 view.someView 用于搜索,在您的 view.pysomeView 函数声明,但是你的函数是一个Javascript 所以,我想,你把它放在模板代码里面了。

我看到你的代码是一个 Javascript 函数,所以我想弄清楚为什么你必须用 Django 模板系统调用这样的函数,作为模板调用,而你不能调用直接发挥作用。我认为随心所欲地执行每次都会强制 DOM 重新加载,并且我认为有几种方法可以在不刷新页面的情况下打开模式。

您可以将 onclick 添加到您的按钮,其值应等于您的功能 像这样

<button onclick='show()' something else ... ></button>

---------------------------- javascript------------ --------------------------------------

function show(){
        something else ...
}

你还可以看到jquerydocumentation

什么ajax会阻止页面重新加载,这就是ajax的神奇之处。因此,如果您提供 path,这可用于重新加载页面。

Html:

<script>
        function OpenModal(){
         var fname="Quartz";
         var mname="Rohit";
         var lname="Patel";
            $.ajax({
                type:'POST',
                url: "{% url 'display_modal' %}",
                data: { csrfmiddlewaretoken: '{{ csrf_token }}'},
                success: function(param123){
                    dict1 = JSON.parse(param123);
                    let data1 = dict1.test;
                    alert("Successful call do what ever you want");
                    alert(data1);
                },
                error: function(){
                    alert("sorry");
                }
            });
        }
</script>

urls.py: url 做了什么 它将正则表达式与您提到的 url 相匹配。 name='display_modal' 参数和您在 ajax 调用中提到的 url: "{% url 'display_modal' %}" 是相同的。

    from django.conf.urls import url
    urlpatterns = [
        url(r'^display_modal', views.displayModalView, name='display_modal')
    ]

views.py:

import json
from django.http import HttpResponse
def displayModalView(request):
    #do what ever you want but at the end return Httpresponse with dictionary if you want 
     to use dictionary in your ajax call.
   param123 = {'test': "Hello_world"}
   return HttpResponse(json.dumps(param123))