如何在Flask中再次渲染模板

时间:2018-06-24 14:20:22

标签: javascript python flask jinja2

我正在开发一个可以显示位置的网站(在Flask中)(根据用户当前位置与位置之间的距离进行分类的方法) 我从HTML5获取经度和纬度,并将其通过ajax发送到后端,它们用于计算距离(已知地点的经纬度),然后将结果保存到数据库中,以进行排序。

获取当前坐标

function geocodeLocation(geocoder, position) {
    geocoder.geocode({'location': position}, function (results, status) {
        if (status === 'OK') {
            if (results[0]) {
                var addr = results[0].formatted_address;
                var value = addr.split(","); 

                $.ajax({
                    type: 'POST',
                    url: 'http://localhost:5000',
                    data: JSON.stringify(position),
                    contentType: 'application/json; charset=UTF-8',
                    dataType: 'json',
                });

            } else {
                console.log('No results found');
            }

        } else {
            console.log('Geocoder failed due to: ' + status);
        }
    });
}

从前端获取Ajax请求,并计算距离

@main.route('/', methods=['GET', 'POST'])
def index():
 data = request.get_json()
 if data is not None:
    place_collections = Place.query.filter_by(county='Bangkok')
    for place in place_collections:
       distance_computing = Place.distance_calculator(float(place.lat), float(place.lng), data['lat'], data['lng'])
       location.distance = round(distance_computing,3)
       db.session.commit()
  place = Place.query.filter_by(county='Bangkok').order_by(Place.distance)
  return render_template('main/home.html', place=place)

home.html

{% if place.distance %}
   <p>distance: {{ place.distance }}</p>
{% endif %}
   <p>address:{{ place.address }}

实际上,该模板在首次访问该网站时已被渲染一次,但是那时距离数据不可用,要显示基于距离的结果,页面需要在完成计算后再次渲染。如何重新加载页面(渲染模板)以显示更改?

如果我在home.html中添加<meta http-equiv="refresh" content="10">,则刷新后会显示新数据,但我希望刷新一次。 还有其他好的解决方案吗?

print(data)的结果,当我什么都不做时,它是None,当我允许获取我的当前位置时,后端可以从前端接收ajax enter image description here

0 个答案:

没有答案