使用AJAX执行Python Django脚本
我在用Django做我的网站。目前,我使用的是location.reload();,这样用户在填写数据并点击按钮时,就会触发location.reload(),然后整个页面会重新加载,这样Django的脚本就会执行。但是我不想重新加载整个页面,只想用ajax重新加载特定的<div>,我该怎么做呢?
{% if userFirstName %}
<div id="topAdminCont" class="left">
<div id="userSection">
<!-- <img src="{% static "assets/images/admin_icon.png" %}" width="20" alt="Admin" class="left" /> -->
<p id="admin" class="right">{{userFirstName}}</p>
<div class="clear"></div>
</div>
<ul id="dropAdmin">
<li><a href="#" id="chngPwdBut">Change Password</a></li>
<li><a href="/authentication/logout">Logout</a></li>
</ul>
</div>
{% else %}
<div id="popCont" class="left username_view">
<p id="signIn"><a href="#">Signin</a></p>
<p>/</p>
<p id="signUp"><a href="#">Signup</a></p>
<div class="clear"></div>
</div>
{% endif %}
上面HTML的Jquery AJAX处理代码:
function authenticateUser(email, password)
{
$.ajax({
url: '/authentication/login/',
type: 'POST',
cache: 'false',
async: 'true',
data: {
signinEmail:email,signinPwd:password,
},
dataType: "json",
success:function(response){
statusCode = response.statusCode;
if (statusCode == 200)
{
location.reload();
}
}
});
}
相关问题:
2 个回答
1
把你的AJAX调用中的成功部分修改成下面这样:
success:function(response){
statusCode = response.statusCode;
if (statusCode == 200)
{
$('#ajaxSection').html(response); #assuming that the response is a HTML
}
}
3
首先,把 <div id="topAdminCont" class="left">...</div> 复制到一个单独的文件里。我们可以称这个文件为:
top_admin.html
{% if userFirstName %}
<div id="topAdminCont" class="left">
<div id="userSection">
<!-- <img src="{% static "assets/images/admin_icon.png" %}" width="20" alt="Admin" class="left" /> -->
<p id="admin" class="right">{{userFirstName}}</p>
<div class="clear"></div>
</div>
<ul id="dropAdmin">
<li><a href="#" id="chngPwdBut">Change Password</a></li>
<li><a href="/authentication/logout">Logout</a></li>
</ul>
</div>
{% else %}
<div id="popCont" class="left username_view">
<p id="signIn"><a href="#">Signin</a></p>
<p>/</p>
<p id="signUp"><a href="#">Signup</a></p>
<div class="clear"></div>
</div>
{% endif %}
然后在你当前的页面,也就是:
current.html
<div id="ajaxSection">
{% include 'top_admin.html' %}
</div>
接下来,为 top_admin.html 创建一个新的视图和网址规则。
urls.py
url(r'^top_admin/$', 'top_admin', name='top_admin'),
views.py
def top_admin(request):
// your stuff here
return render(request, 'top_admin.html', {
// call admin object variables here
})
最后是你的 ajax 请求:
$.ajax({
...
success: function(response) {
if (response.statusCode == 200) {
$('#topAdminCont').load('/app_name/top_admin/');
}
},
...
显然,你需要根据自己的应用程序修改很多具体的内容(比如名字、网址等等),但是这个方法可以让你在页面上重新加载内容,而不需要重新加载整个页面。