使用AJAX执行Python Django脚本

1 投票
2 回答
1345 浏览
提问于 2025-04-17 21:19

我在用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/');
        }
    },
    ...

显然,你需要根据自己的应用程序修改很多具体的内容(比如名字、网址等等),但是这个方法可以让你在页面上重新加载内容,而不需要重新加载整个页面。

撰写回答