Отображение данных, извлеченных из Интернета, на веб-сайте Flask - PullRequest
0 голосов
/ 10 июля 2020

Я пытаюсь создать список кафе, которые были скопированы с веб-сайта, в шаблоне cafe_form. Скребок работает правильно, но я не могу заставить его отображать результаты в шаблоне html.

Я пытаюсь использовать a для l oop, но не могу понять это ..

Вот код .py маршрутов:

@app.route('/cafes', methods = ['GET', 'POST'])
def cafe():
    cafe_form = CafeForm()
    cafes_user_city = CafeForm
    if cafe_form.validate_on_submit():
        ##flash(f'The city you chose is {cafe_form.city.data}, The Suburb {cafe_form.suburb.data}')

        url_cafes = f"https://www.broadsheet.com.au/{cafe_form.city.data}/guides/best-cafes-{cafe_form.suburb.data}" #f-string adds user suburb
        html_cafes = urlopen(url_cafes)

        soup_cafe_list = BeautifulSoup(html_cafes, 'html.parser') 
        type(soup_cafe_list)

        cafe_container = soup_cafe_list.find_all("h2", class_= "venue-title") 

        cafes =[]
        for container in cafe_container:
            cafes.append(container.text)

        print(cafes) 

    return render_template('cafeform.html', title= 'Search', cafe_form=cafe_form)

А вот шаблон html.

{% extends "base.html" %}

{% block content %}
  <h1>Cafes Search</h1>
  <form action="" method="post" novalidate>
    {{ cafe_form.hidden_tag() }}

    <p>
        {{ cafe_form.city.label }}<br>
        {{ cafe_form.city(size=32) }} <br>
    </p>

    <p>
      {{ cafe_form.suburb.label }}<br>
      {{ cafe_form.suburb(size=32) }} <br>
    </p>

    <p>
      {{ cafe_form.submit() }}
    </p>

  </form>

    <h1>Results</h1>
    {% for cafe in cafes %}
    <div><p> {{ cafes }} </p></div>
    {% endfor %}

{% endblock %}

1 Ответ

1 голос
/ 10 июля 2020

Похоже, вы не передаете в шаблон переменную cafes. Что можно исправить с помощью:

return render_template('cafeform.html', title= 'Search', cafe_form=cafe_form, cafes=cafes)

Что касается вашего шаблона, вы отображаете весь массив cafes, поэтому вместо этого просто измените cafes на cafe, чтобы отобразить элемент :

<h1>Results</h1>
{% for cafe in cafes %}
<div><p> {{ cafe }} </p></div>
{% endfor %}
...