Django与ajax请求

问题描述 投票:0回答:1

我有以下代码

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 templating language.url中点击按钮时执行上面的代码是这样的。

path('member/search/',
         views.displayModalView, name="display_modal"),
python django ajax django-urls
1个回答
1
投票

ajax的作用是防止页面重载,这就是ajax的神奇之处。所以,如果你提供的是 "+mname+"+lname; alert(url); xmlhttp = new ... path,这可以用于页面重载。

Html.Urls.py:什么?

<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:what url 它将与你提到的url.the的regex匹配。name='display_modal' 参数和 url: "{% url 'display_modal' %}" 你在ajax调用中提到的也是一样。

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

在views.py中,你可以使用一个jQuery的Ajax请求。

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))

0
投票

我认为你可以在正常的click()方法中使用jQuery Ajax请求,就像这里描述的那样。W3C文档

然而,在这种情况下,我认为你必须将url声明为 TemplateAsView因此,你可以告诉Django立即返回一个模板,而不是执行一个Django视图,如在 文档. 在模板中,你可以按照你的意愿执行函数,例如在模板中,你可以在文档准备好时插入对你的函数的调用,并在DOM加载时执行,如上所述。此处.

要做到这一点,你必须改变网址,因为一个 view.someView 在做了搜索,在你的 视图.py, SomeView函数声明但你的函数是一个Javascript,所以,我猜测,你把它放在模板代码里面。

我看到你的代码是一个Javascript函数,所以我试着想,为什么你要用Django模板系统调用这样的函数,作为模板调用,而不能直接调用函数。我认为,按照你的想法去做,你每次都会强制重载DOM,而且,我认为,有几种方法可以在不刷新页面的情况下打开modal。


0
投票

你可以在你的按钮上添加onclick,其值应该等于你的函数,像这样。

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

function show(){
        something else ...
}

你也可以看到jquery 文件

© www.soinside.com 2019 - 2024. All rights reserved.