带有ajax请求的Django

Posted

技术标签:

【中文标题】带有ajax请求的Django【英文标题】:Django with ajax Request 【发布时间】: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"),

【问题讨论】:

【参考方案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

【讨论】:

以上是关于带有ajax请求的Django的主要内容,如果未能解决你的问题,请参考以下文章

DjangoAJAX 񙂦

DjangoAJAX 񂒁

Django Ajax“禁止”错误

django ajax请求响应[重复]

Django Ajax 发布请求

Django AJAX 错误:仅协议方案支持跨源请求