yas17sin
yas17sin

Reputation: 11

how to get nearby places using google places with python and flask

i am trying to get nearby places using googleplaces with python and flask

i am getting this error: (UnboundLocalError: local variable 'place_name' referenced before assignment)

here is my code:

@app.route('/Search', methods=['POST', 'GET'])
@login_required
def Search():
    if request.method == 'POST':
        query_result = google_places.nearby_search(
            lat_lng={'lat':31.7917, 'lng' : 7.0926},
            radius=500,
            types=[types.TYPE_SHOPPING_MALL] or [types.TYPE_STORE])`

        if query_result.has_attributions:
            print(query_result.html_attributions)

        for place in query_result.places:
            place.get_details()
            place_name = place.name
            print(place.name)
            place_rating = place.rating
            print(place.rating)
            place_location = place.get_location
            print(place.get_location)
            for photo in place.photos:
                photo.get(maxheight=500, maxwidth=500)
                photo.mimetype
                photo.url
                photo.filename
                photo.data
            return render_template('Search.html', place_name, place_rating, place_location)
    else:
        return render_template('Search.html')```


#Note: i am new to python in general

Upvotes: 0

Views: 753

Answers (1)

v25
v25

Reputation: 7656

return render_template('Search.html', place_name, place_rating, place_location)

The above isn't valid syntax. When you pass the details to the template, you need to do it as:

return render_template('Search.html', name = place_name,
                        rating = place_rating, location = place_location)

The variables name, rating and location will then be accessible in the template as {{name}}, {{rating}} and {{location}}.

However, the way you have the for loops laid out means the first time the return statement is reached, it will stop the loop and return the template with these variables.

Perhaps this is what you want, but you may wish to pass query_result to the template, and implement a Jinja2 for loop in the template to print out the various place details. You would remove the for loops and replace that whole block with:

return render_template('Search.html', all_places = query_result)

Then in the template something like:

{% if all_places %}
{% for place in all_places %}
    <p><b>{{place.name}}</b> has a rating of <u>{{place.rating}}</u></p>
{% endfor %}
{% else %}
    <p>No places found.</p>
{% endif %}

Upvotes: 1

Related Questions