django分页后查询丢失

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了django分页后查询丢失相关的知识,希望对你有一定的参考价值。

刚学习Django写了一个搜索的视图函数,想对搜索内容进行分页,现在有个问题,搜索内容提交后可以正常分页并显示第一页,选择第二个页时由于POST内容没传过去页面就显示不出来,请问哪个大神有好的解决办法

参考技术A 一般分页查询用GET方法,在查询URL里面把查询参数除Page参数以外的保留,然后对page参数做相应+1,-1处理即可,然后处理完的page参数再和URL的其它部分构成分页的下一页,上一页链接URL。 参考技术B url 配置 http://xxxx/page/2/ --> url(r'page/(?P<page_id>\d+)$', 'views.xx', name='')

然后 views.py
def xx(request, page_id):
page_id = page_id

这样 page_id 就传递过来了

你还是好好看看 Django相应版本的官方文档吧。

GET 和 POST 传递数据

朋友,您好,我想问Django分页后查询条件丢失的问题

刚学习Django写了一个搜索的视图函数,想对搜索内容进行分页,现在有个问题,搜索内容提交后可以正常分页并显示第一页,选择第二个页时由于GET内容没传过去页面就显示不出来,请问哪个大神有好的解决办法 这是我的控件部分:查询部分
<form action="." method="GET"> <fieldset id="search_fieldset" style="paddng:20px;background:#3CF; border:#ccc 1px solid"> <input type="text" name="q" value="query | escape" class="input_text"> <input type="submit" value="Search" class="search_button"> </fieldset> </form>
分页部分
<div class = "pagination">
<span class="step-links">
% if results.has_previous %
# 这里需要将原来的条件传递过来 #
<a href="?page=results.previous_page_number&q=">previous</a>
% endif %
<span class = "current">
Pageresults.number of results.paginator.num_pages
</span>
% if results.has_next %
<a href="?page=apps.next_page_number&q=">next</a>
% endif %
</span>
</div>
网上有人说需要把查询条件放在 <a href="?page=results.previous_page_number&q=">previous</a>的&q=中,但我不知道这里面放什么,希望朋友您能教一下,十分感谢

很简单的GET传值,晚上再回答吧,现在有点事...


给你个示例代码吧

# views.py

def order_forms_by_days(request):
    """
     订单日统计报表,读取 本地 count_days 表
    :param request:
    :return:
    """
    cursor = connections['mfashion_db'].cursor()
    sql = 'SELECT * FROM count_days ORDER BY date DESC'
    cursor.execute(sql)
    results = dictfetchall(cursor)

    limit = 20
    paginator = Paginator(results, limit)
    page = request.GET.get('page')
    try:
        orders = paginator.page(page)
    except(PageNotAnInteger, EmptyPage):
        orders = paginator.page(1)

    params = 
        'request': request,
        'orders': orders,
        'page': page
    

    return render_to_response('boss/census_days.html', params, context_instance=RequestContext(request))

% with orders as datas %
        <div class="ui page grid floated" style="margin-top: 30px;">
            <div class="column">
                <h2>订单日统计报表</h2>
                订单总数量: <h3> all_counts </h3>总金额(元): <h3> all_price </h3>
                <table class="ui compact small striped table">
                    <thead>
                    <tr>
                        <th>订单编号</th>
                        <th>下单时间</th>
                        <th>支付时间</th>
                        <th>买家姓名</th>
                        <th>卖家名称</th>
                        <th>订单状态</th>
                        <th>商品名称</th>
                        <th>订单金额</th>
                    </tr>
                    </thead>
                    <tbody>
                    % for order in orders %
                        <tr>
                            <td> order.trade_no </td>
                            <td> order.create_time </td>
                            <td> order.paid </td>
                            <td> order.shipped </td>
                            <td> order.sign </td>
                            <td> order.completed </td>
                            <td> order.cancelorder </td>
                            <td> order.deliveryfailure </td>
                            <td> order.refund </td>
                            <td> order.refuseorders </td>
                            <td> order.closeorders </td>
                            <td> order.total </td>
                        </tr>
                    % endfor %
                    </tbody>
                </table>
                <div class="ui two column centered grid">
                    <div class="column centered row">
                        <div class="ui pagination menu">

                            % if datas.has_previous %
                                <a class="icon item"
                                   href="?% url_replace request 'page' datas.previous_page_number %">
                                    <i class="left arrow icon"></i>
                                </a>
                                % else %<a class="disabled icon item"><i class="left arrow icon"></i>
                                </a>
                            % endif %
                            <div class="item">
                                 datas.number / datas.paginator.num_pages 
                            </div>
                            % if datas.has_next %
                                <a class="icon item"
                                   href="?% url_replace request 'page' datas.next_page_number %">
                                    <i class="right arrow icon"></i>
                                </a>
                                % else %<a class="disabled icon item"><i class="right arrow icon"></i>
                                </a>
                            % endif %
                        </div>
                    </div>
                </div>
            </div>
        </div>

    % endwith %

来自:求助得到的回答
参考技术A

给你个Pager类的源代码吧:

class Pager:
    def __init__(self,size,offset,request):
        self.offset = offset;
        self.path = request.path;
        self.query_dict = request.GET.copy()
        self.size = size;
    def has_previous(self):
        if self.offset>0:
            return True
        else:
            return False
    def has_next(self):
        if self.size>20:
            return True
        else:
            return False
    def previous_url(self):
        if self.has_previous():
            self.query_dict["offset"]=self.offset-20
            return self.path+"?"+self.query_dict.urlencode()
        else:
            return None
    def next_url(self):
        if self.has_next():
            self.query_dict["offset"]=self.offset+20
            return self.path+"?"+self.query_dict.urlencode()
        else:
            return None

以上是关于django分页后查询丢失的主要内容,如果未能解决你的问题,请参考以下文章

django 中的分页 - 原始查询字符串丢失

对数据分页后,2次查询的分页,点击上一页,下一页,首页,尾页,都会跳到2次查询之前的分页显示,怎么办

django 做了搜索之后再做分页 结果显示第一页是正常的 但是按下一页后显示出整个主页的第二页

jqgrid分页后,自定义查询数据怎么得到所有页的某列值的合计

Django分页

react antd Form 切换Table分页后Table内Input数据丢失问题处理