【问题标题】:Django with ajax Request带有ajax请求的Django
【发布时间】:2020-08-17 17:28:15
【问题描述】:

我有以下代码

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 模板语言中单击按钮执行上述代码。 网址就像

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

【问题讨论】:

    标签: python django ajax django-urls


    【解决方案1】:

    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 做了什么,它将与您提到的网址匹配正则表达式。 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))
    

    【讨论】:

    • 我想要一个 get 请求并将三个参数,即 fname、mname 和 lname 传递给我的视图,在上面的例子中它的 displayModalView(request,fname,mname,lname)
    • 感谢您的提示。我得到了解决方案。我替换了数据:{ fname,mname,lname} 和 path('member/search/$',这对我有用。
    【解决方案2】:

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

    然而,在这种情况下,我认为您必须将 url 声明为 TemplateAsView,这样您就可以告诉 Django 立即返回模板而不是执行 Django 视图,如doc 中所述。在模板中,您可以根据需要执行函数,例如,在模板中,您可以在文档就绪时插入对函数的调用,并在加载 DOM 时执行,如 here 所述。

    为此,您必须更改网址,因为 view.someView 在您的 view.py 内进行搜索,someView 函数声明,但是你的函数是一个 Javascript,所以我想你把它放在模板代码中。

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

    【讨论】:

    • 我想打开一个模态窗口。同样在模态窗口中,我想将参数从主窗口传递到模态窗口。这就是我使用 fname,mname,lname 参数的原因。如果我使用 var url="{% url 'display_modal' Quartz Rohit Patel %} 那么我会得到想要的结果。但我想传递参数。
    【解决方案3】:

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

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

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

    function show(){
            something else ...
    }
    

    你也可以看jquerydocumentation

    【讨论】:

      猜你喜欢
      • 2011-11-15
      • 2013-02-15
      • 2021-01-09
      • 2012-12-12
      • 2014-03-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多