我的网站需要过滤功能,支持多个参数过滤。
我是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主题渲染?
或者你们有更好的解决方案或模块?
答案 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')