2016-08-17 9 views
0

問題が何であるかわかりませんが、私の関数が実行するとデータベースからクエリリストを取得する必要があり、オブジェクトが含まれていない場合はFalseとelse部分Ifステートメントは常にTrueです。Jinja2テンプレート

最初の部分の作業を実行しますが、私のデータベースが空の場合でも、それは本当、

{% if new_bookmarks %} 
    <div id='newBookmarks'> 
     {% for bm in new_bookmarks %} 
      <a href='{{ bm.url }}'><span>{{ bm.user.username }}</span> 
      Added: {{ bm.url }} <span>{{ bm.description }}</span></a> 
     {% endfor %} 
    </div> 
{% else %} 
    <div> 
     Something else 
    </div> 
{% endif %} 

@app.route('/') 
@app.route('/index') 
def index(): 
    return render_template('index.html', new_bookmarks=Bookmark.newest(5)) 

を渡す必要があります
class Bookmark(db.Model): 
    id = db.Column(db.Integer, primary_key=True) 
    url = db.Column(db.Text, nullable=False) 
    date = db.Column(db.DateTime, default=datetime.utcnow) 
    description = db.Column(db.String(300)) 
    user_id = db.Column(db.Integer, db.ForeignKey('user.id'), nullable=False) 

    @staticmethod 
    def newest(num): 
     return Bookmark.query.order_by(desc(Bookmark.date)).limit(num) 

答えて

1

問題は、クエリが遅延している、つまり、繰り返し処理を開始するまで実行されないということです。したがって、真実性をテストしている時点で、そこにいくつのレコードが含まれているかはわかりません。デフォルトでは、Pythonのほとんどのオブジェクトは真実であり、これもクエリに適用されます。

この問題を回避するには、使用:

return Bookmark.query.order_by(desc(Bookmark.date)).limit(num).all() 

.all()は、クエリを実行し、リストに結果を置きます。リストは空のときに偽である。これは小さなクエリであるため、結果をメモリにまとめてしまうという短所は軽微です。

+0

ありがとう、理解しようとしている私には、 –

+0

私は外来のキーとしてこの行を別のテーブルに持っていますが、これは問題を引き起こしていますか? bookmarks = db.relationship( 'Bookmark'、backref = 'user'、lazy = 'dynamic') –

関連する問題