jquery - django.core.paginator 使用 jQuery 进行 Ajax 分页

标签 jquery ajax django django-templates

问题

我需要在 Django 模板中使用 jQuery 进行 Ajax 分页。

情况

我的模板中有以下代码:

<script type="text/javascript">
$(document).ready(function() {
    $("#next-page").click(function() {
        var page = {{ vms.next_page_number }};
        $("#vms").html('&nbsp;').load (
            '{% url virtualmachine-list %}?page=' + q );
    });
});
</script>

[code omitted]

<table>
<thead>

    [code omitted]

</thead>
<tbody id="vms">
    {% for vm in vms.object_list %}

         [code omitted]

    {% endfor %}
</tbody>
</table>


[code omitted]

{% if vms.has_next %}
    <!--<a href="?page={{ vms.next_page_number }}" id="next-page">Next</a>-->
        <a href="#" id="next-page">Next</a>
    {% endif %}
</span>

以及我的观点:

def list_(request):
    vms = VirtualMachine.objects.all()
    paginator = Paginator(vms, 10)

    page = 1
    if request.is_ajax():
        query = request.GET.get('page')
        if query is not None:
            page = query

    try:
        vms = paginator.page(page)
    except (EmptyPage, InvalidPage):
        vms = paginator.page(paginator.num_pages)

    return render_to_response('virtual_machine/list.html', {
        'vms': vms,
        },
        context_instance=RequestContext(request),
    )

结论

因此,每当我按“下一步”时,它实际上会执行 Ajax 请求,但数据不会在表中呈现。

使用 django.core.paginator 进行分页,如果可能的话,我真的很想坚持使用它。

你能看出代码缺少/有什么问题吗?

最佳答案

我没有找到错误,但我在下面向您展示了我如何解决此任务。我认为您可以轻松地根据您的需求进行调整。

jquery ajax 部分:

<script type="text/javascript">
function ajax_get_update()
    {
       $.get(url, function(results){
          //get the parts of the result you want to update. Just select the needed parts of the response
          var table = $("table", results);
          var span = $("span.step-links", results);

          //update the ajax_table_result with the return value
          $('#ajax_table_result').html(table);
          $('.step-links').html(span);
        }, "html");
    }

//bind the corresponding links in your document to the ajax get function
$( document ).ready( function() {
    $( '.step-links #prev' ).click( function(e) {
        e.preventDefault();
        url = ($( '.step-links #prev' )[0].href);
        ajax_get_update();
    });
    $( '.step-links #next' ).click( function(e) {
        e.preventDefault();
        url = ($( '.step-links #next' )[0].href);
        ajax_get_update();

    });
});

//since the links are reloaded we have to bind the links again
//to the actions
$( document ).ajaxStop( function() {
    $( '.step-links #prev' ).click( function(e) {
        e.preventDefault();
        url = ($( '.step-links #prev' )[0].href);
        ajax_get_update();
    });
    $( '.step-links #next' ).click( function(e) {
        e.preventDefault();
        url = ($( '.step-links #next' )[0].href);
        ajax_get_update();
    });
});
</script>

模板html部分:

<div class="pagination">
            <span class="step-links">
                {% if object_list.has_previous %}
                <a id="prev" href="?{{ urlquerystring_previous_page }}">previous</a>
                {% else %}
                <span style="visibility:hidden;">previous</span>
                {% endif %}

                <span class="current">
                Page {{ object_list.number }} of {{ object_list.paginator.num_pages }}.
                </span>

                {% if object_list.has_next %}
                            <a id="next" href="?{{ urlquerystring_next_page }}">next</a>
                {% else %}
                            <span style="visibility:hidden;">next</span>
                {% endif %}
            </span>
        </div>

            <form class="" id="action-selecter" action="{{ request.path }}" method="POST">

            <div id="ajax_table_result">
                <table class="w600" cellspacing="5">
                    <thead>
                        {% table_header headers %}
                    </thead>
                        <tbody>
                          ....

关于jquery - django.core.paginator 使用 jQuery 进行 Ajax 分页,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4608323/

相关文章:

javascript - 使用 CSS 制作二进制数动画

javascript - 在我的 ul 列表中查找并分隔带有单词首字母的单词?

jquery - jquery POST 方法不起作用?

javascript - 从 Web 服务返回对象到 Ajax 请求成功回调函数

javascript - Laravel 依赖选择

javascript - 使用大量术语,搜索页面文本并用链接替换单词

mysql编码问题

javascript - jQuery 事件触发一次,然后再也不会

django - django html_message 和发送邮件中的消息有什么区别

django - 创建 aws cli 容器以将 django postgres 数据库备份上传到 s3