2016-07-25 122 views
0

基於Flask和SQLAlchemy,分頁僅在缺省第1頁上運行良好,當單擊上一頁或下一頁時,顯示空白頁(空白SearchForm)。 似乎前後頁面無法獲得搜索關鍵字的值,分頁不會返回任何結果。我試過如下:Flask分頁無法獲取下一頁上的表單數據,如下所示:

form.py

class SearchForm(Form): 
    search_keyword = StringField('', validators = [DataRequired()]) 
    submit = SubmitField('Start Search') 

views.py

@app.route('/search', methods=['GET']) 
def search(): 
    form = SearchForm(): 
    keyword = form.search_keyword.data 

    page = request.args.get('page', 1, type=int) 
    value = request.args.get('keyword') 

    if form.validate_on_submit(): 
     pagination = Post.query.filter(Post.content.like(keyword))paginate(
      page, per_page=current_app.config['default'], error_out=False) 

posts = pagination.items 
return render_template('search.html', posts=posts, pagination=pagination, form=form, value=value) 

search.html

<div class="list"> 
    {% include 'base.html' %} 
</div> 
{% if pagination %} 
    <div class="pagination"> 
    {{ macros.pagination_widget(pagination, '.search', value=value)}} 
    </div> 
{% endif %} 
+0

你需要包括分頁代碼小窗口很可能你的分頁小部件沒有附加你需要的url參數。 – Doobeh

+0

我已經爲此搜索分頁添加了「base.html」,但我不確定關鍵字「值」是否需要通過「base.html」? 'base.html'只是一個迭代頁面(用於發佈帖子,列表帖子...)。我如何檢查'值'是否已成功傳入查詢? – rogwan

回答

0

我不知道有多少類似的我的情況下, 但我敢肯定的是,你需要繞過

if form.validate_on_submit(): 

在我的情況下,增加一個例外:

if form.validate_on_submit() or request.args.get('page'): 

但是我的問題不是簡單地通過這個步驟單獨解決的,我有我的表單數據存儲到一個全局列表,再次檢索。不過,別忘了,我使用的是POST形式沒有得到

if request.args.get("page"): 
    global pll 
    ll = pll 
else: 
    ll = [form.number.data, form.datetime.data, form.tl.data] 
    global pll 
    pll = ll 

,這裏是我的整個可怕的解決方法:

@app.route('/search', methods=['GET', 'POST']) 
def search(): 
    form = Search_s() 
    if form.validate_on_submit() or request.args.get("page"): 
     from sqlalchemy.sql import and_ 
     terms = [] 
     counter = 0 
     if request.args.get("page"): 
      global pll 
      ll = pll 
     else: 
      ll = [form.number.data, form.datetime.data, form.tl.data] 
      global pll 
      pll = ll 
     for l in ll: 
      counter += 1 
      if l is not None: 
       if counter == 1: 
        if len(l) >= 2: 
         terms.append("number="+str(ll[0])) 
       elif counter == 2: 
        if len(l) >= 2: 
         terms.append("timestamp='"+ll[1]+"'") 
       elif counter == 3: 
        if l != 0: 
         terms.append("office_id="+str(ll[2])) 
     if len(terms) == 0: 
      flash("Error: fault in searching parameters ..", "danger") 
      return redirect(url_for("search")) 
     serials = Serial.query.filter(and_(*terms)) 
     if serials.first() is None: 
      flash("Notice: Sorry no results were found ..", "info") 
      return redirect(url_for("search")) 
     page = request.args.get('page', 1, type=int) 
     pagination = Serial.query.filter(and_(*terms)).order_by(Serial 
                   .timestamp 
                   .desc()).paginate(
                    page, 
                    per_page=10, 
                    error_out=False) 
     serialsp = pagination.items 
     return render_template("search_r.html", 
           serials=serials, 
           ptitle="Tickets search", 
           offices=Office.query, 
           tasks=Task.query, 
           pagination=pagination, 
           serialsp=serialsp, 
           len=len, 
           snb="#snb1", 
           snb2="#da1") 
    return render_template("search.html", 
          form=form, 
          ptitle="Tickets search", 
          offices=Office.query, 
          tasks=Task.query, 
          snb="#snb1", 
          snb2="#da1") 
相關問題