带有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的主要内容,如果未能解决你的问题,请参考以下文章