كيفية الحفاظ على معلمات الاستعلام أثناء الصفحات مع webhellpers.paginate

StackOverflow https://stackoverflow.com/questions/1518068

سؤال

أنا تبدو مثالا على التصنيفات من http://rapidprotototype.ch/bg2docs/tg2pagination.html. بالنسبة لمشروع My TurboGears 2 ويعمل بشكل رائع ولكن لدي مشكلة فيما يتعلق بمعلمات الاستعلام الخاصة بي عندما أقوم بتغيير الصفحة التي أبحث فيها.

هذا هو ما لدي في جهاز التحكم الخاص بي عند الإدراج.

def list(self, page=1, **kw):
    q = ""

    if kw.has_key('q'):
        log.debug("searching %s" % kw)
        q = kw['q']

    if kw.has_key('all'):
        q = ""

    products = DBSession.query(model.Product).filter(
        or_(model.Product.name.like('%%%s%%' % q),
            model.Product.description.like('%%%s%%' % q),
            model.Product.model.like('%%%s%%' % q),
            model.Product.code.like('%%%s%%' % q))).all()

    def get_link(product):
        return Markup("""<a href="form?id=%s">%s</a>""" % (product.id, product.id))

    product_fields = [
        (Markup("""<a href="?s=id">Id</a>"""), get_link),
        (u'Name', 'name'),
        (u'Model', 'model'),
        (u'Code', 'code'),
        (u'Description', 'description')]

    product_grid = MyDataGrid(fields = product_fields)

    currentPage = paginate.Page(products, page, items_per_page=50)

    return dict(currentPage=currentPage, 
        title=u'Products List', item=u'product', items=u'products',
        data=currentPage.items, 
        grid=product_grid,
        page=u'Search %s results' % q,
        q=q,
        hits=len(products))

هذا هو جزء قالب HTML

<h1>List of ${items}</h1>
<form action="list" method="get">
   <input name="q" type="text" value="${value_of('q', default='')}"/>
   <input type="submit" value="Search"/> <input type="submit" name="all" value="All"/>
</form>
${hits} ${items} found
<p class="pagelist">${currentPage.pager(format='$link_first ~3~ $link_last')}</p>
<div>
  ${grid(data)}
</div>
<p><a href="${tg.url('form')}">Add a ${item}</a></p>

عمليات البحث تعمل بشكل جيد مما يؤدي إلى روابط مثل هذا "/ قائمة؟ Q = كابل"ولكن عندما أقوم بالنقر فوق بعض الصفحات المذنبية" 1،2 ... 8،9 "يتحول إلى"/ قائمة؟ صفحة = 2'

كيف أضيف معلمة الاستعلام السابقة أو أي معلمات أخرى إلى الرابط؟

هل كانت مفيدة؟

المحلول

بعد التجربة على قذيفة لفترة من الوقت أعتقد أنني وجدت حلا.

هناك قاموس Kwargs المحدد في CurerangePage (بعد تعيينه من Paginate.Page)، لذلك قمت بإرسال بعض التجارب إلى إرسال المعلمات وعملت. هذه هي الطريقة.

currentPage = paginate.Page(products, page, items_per_page=50)

currentPage.kwargs['q'] = q

return dict(currentPage=currentPage, 
    title=u'Products List', item=u'product', items=u'products',
    data=currentPage.items, 
    grid=product_grid,
    page=u'Search %s results' % q,
    q=q,
    hits=len(products))

الآن أحصل على هذا النوع من الروابط:/ قائمة؟ q = كابل و page = 2"لا يزال يتساءل عما إذا كان أفضل حل أو افضل تمرين

نصائح أخرى

يجب عليك استخدام بناء الجملة مثل:

currentPage.kwargs['q'] = q

currentPage = paginate.Page(
                            products,
                            page,
                            items_per_page=50,
                            q = q
)

يمكنك تحديث طلبات الطلب، مثل هذا القصاصات.

def paginate(self, items, items_per_page=20):
    """https://bitbucket.org/bbangert/webhelpers/src/acfb17881c1c/webhelpers/paginate.py"""

    current_page = self.request.GET.get('page') or 1

    def page_url(page):
        params = self.request.params.copy()
        params['page'] = page
        return self.request.current_route_url(_query=params)

    return Page(collection=items, page=current_page, items_per_page=items_per_page, url=page_url)
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top