2016-07-25 12 views
0

FlaskとSQLAlchemyに基づいて、ページ設定はデフォルトの第1ページのみでうまく動作し、前または次のページをクリックすると空白のページが表示されます。 前と次のページは検索キーワードの値を取得できないようですが、ページネーションは結果を返しません。次のように私が試してみた: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

あなたはそれはおそらく、あなたのページネーションだwidget-ページネーションのためのコードを含める必要がありますウィジェットは必要なURL引数を添付していません。 – Doobeh

+0

この検索ページ設定に 'base.html'を追加しましたが、キーワード 'value'が 'base.html'を通過する必要があるかどうかわかりません。 'base.html'は反復ページだけです(投稿の投稿、リスト投稿...)。 「値」がクエリに正しく渡されたかどうかを確認するにはどうすればよいですか? – rogwan

答えて

0

私がどれだけ似て、あなたの知りません私の場合は、 しかし、私はあなたがバイパスする必要があると確信している

私の場合には、例外を追加することにより、
if form.validate_on_submit(): 

:私の問題は、単に一人で、このステップによって解決されなかったが

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

、私はグローバルリストに自分のフォームデータを保存し、それを再度取得する必要がありました。しかし、私は

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

をGETしませPOSTフォームを使用して、ここで私の全体の恐ろしい回避策だよ、あなたを気に:

@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") 
関連する問題