首页 > Flask如何在模板中直接引用数据库调用数据?

Flask如何在模板中直接引用数据库调用数据?

Flask+SQLAlchemy,Flask如何在模板中直接引用sqlalchemy或者models来调用数据?即不通过view传递。


你可以使用jinja2自定义filter


在模板中的class里定义函数,可以直接使用SQLAlchemy来调用数据。比如

class User(db.Model):
    __tablename__ = 'users'
    id = db.Column(db.Integer,primary_key=True)
    email = db.Column(db.String(64), unique=True, index=True)
    username = db.Column(db.String(64),unique=True,index=True)
    password_hash = db.Column(db.String(128))
    last_seen = db.Column(db.DateTime(), default=datetime.datetime.utcnow)
    
    def ping(self):
        self.last_seen = datetime.datetime.utcnow()
        db.session.add(self)            #直接将数据储存到db
    
    def change_email(self, token):
        s = Serializer(current_app.config['SECRET_KEY'])
        try:
            data = s.loads(token)
        except:
            return False
        if data.get('change_email') != self.id:
            return False
        new_email = data.get('new_email')
        if new_email is None:
            return False
        if self.query.filter_by(email=new_email).first() is not None:   #调用数据做判断
            return False
        self.email = new_email
        self.avatar_hash = hashlib.md5(
            self.email.encode('utf-8')).hexdigest()
        db.session.add(self)
        return True

楼上正解
定义一个函数func_test,然后注册到jinja的filters中,如下
app.jinja_env.filters['func_filter'] = func_test
然后在template中就可以使用了

【热门文章】
【热门文章】