如何在前面应用Flask管理过滤功能?

时间:2018-01-21 14:10:23

标签: python flask flask-sqlalchemy flask-admin

我的网站需要过滤功能,支持多个参数过滤。

我是Python的新手,不知道该怎么做。 我只有一个params过滤器函数,我写了一个像这样的转储代码,我知道这是一个转储,但总比没有好。

@front_bp.route('/<any(district,rooms,price,type):url_path>/<keyword>/<int:page>/')
def houses_list(url_path,keyword,page = 1):
if url_path == 'district':
    result = {
        'keyword':keyword,
        'url_path':url_path,
        'houses': Home.query.filter(Home.house_district == keyword,Home.house_status == None).order_by(Home.id.desc()).paginate(page,16, False)
    }
    return render_template('house.html',**result)

elif url_path == 'price':
    pricerange = keyword.split('-')

    result = {
        'keyword': keyword,
        'url_path': url_path,
        'houses': Home.query.filter(Home.rental_price > pricerange[0],Home.rental_price <= pricerange[1], Home.house_status == None).order_by(Home.id.desc()).paginate(page, 16, False)
    }
    return render_template('house.html', **result)

elif url_path == 'rooms':
    roomsrange =[int(keyword)-1,int(keyword)]
    result = {
        'keyword': keyword,
        'url_path': url_path,
        'houses': Home.query.filter(Home.house_rooms > roomsrange[0],Home.house_rooms<= roomsrange[1],Home.house_status == None).order_by(Home.id.desc()).paginate(page, 16, False)
    }
    return render_template('house.html',**result)

elif url_path == 'type':
    result = {
        'keyword': keyword,
        'url_path': url_path,
        'houses': Home.query.filter(Home.house_type == keyword,Home.house_status == None).order_by(Home.id.desc()).paginate(page, 16, False)
    }
    return render_template('house.html',**result)

我注意到Flask管理员在后端有一个多个参数过滤器。 我的问题是如何在前面使用它?如何用jinja主题渲染?

或者你们有更好的解决方案或模块?

1 个答案:

答案 0 :(得分:0)

首先,您应该使用url_prefix注册一些蓝图,例如rooms_bp,price_bp,而不是front_bp来覆盖网络的所有内容。您可以了解有关blueprint的更多信息。

rooms_page = Blueprint('rooms_page', __name__, template_folder='templates', url_prefix='/rooms')

之后,您可以将一些参数传递给jinja来渲染模板,并且根据Jinja2 Documentation可以像在python中一样使用参数。

{% if houses %}
 <div>
 ...
 </div>
{% endif %}

最后,如果您的页面中确实有很多动态内容,则需要使用flask_restful模块进行restful api。

api_page = Blueprint('api', __name__, url_prefix='/api')