Flask - Передача списка в новый вид - PullRequest
0 голосов
/ 23 июня 2019

Я создаю веб-приложение с Flask и всеми соответствующими фреймворками и библиотеками (Jinja, WTForms и т. Д.). Я впервые использую Flask и создаю правильное веб-приложение. У меня возникают проблемы с выяснением того, как получить доступ к данным в различных функциях в файлах каталога моего приложения.

Чтобы было ясно, я хочу передать пользовательский ввод (из форм HTML) в функцию python, которая создает список, а затем передать этот список обратно в HTML и отобразить его на веб-странице.

Например:

@app.route("/tool2", methods=['GET', 'POST'])
def tool2():
form = ToolForm()

def mainfunc(var1):

    #Code related to souping

    newdata = []

    for i in list(range(2)):

    maindata = [inte.text for inte in soup.find('div', {'id':'main-content'}).find_all('a', {'class': 'main-info'})]

        if var1 == 'x':
            for i2 in maindata:
                rda = i2 
                newdata.append(rda)
        elif var1 == 'y':
            for i3 in maindata:
                rda = "-" + i3 + "-"
                newdata.append(rda)
        elif var1 == 'z':
            for i4 in maindata:
                rda = '+' + i4 + '+'
                newdata.append(rda)
        else:
            redirect(url_for('tool3')) # <-- This is not working either, if someone wants to be generous and enlighten me on that as well.



        print(newdata)

        testpagecount += 1


if form.validate_on_submit():
    mainfunc(form.tester.data)


return render_template('tool2.html', title='Tool-Active', form=form)

Я хочу напечатать newdata на веб-странице через html, но если я попытаюсь вызвать его, ничего не произойдет (не печатается, я также не получаю никаких ошибок).

Мой HTML-код (независимо от того, где я пытаюсь напечатать newdata в html, он не печатает):

{% extends "layout.html" %}
{% block content %}
<div class="content-section">
    <form method="POST" action="">
        {{ form.hidden_tag() }}
        <fieldset class="form-group">
            <legend>Tester</legend>


            <div class="form-group">
                    {{ form.var1.label(class="form-control-label") }}
                    {% if form.var1.errors %}
                    {{ form.var1(class="form-control form-control-lg is-invalid") }}
                    <div class="invalid-feedback">
                        {% for errors in form.var1.errors %}
                            <span>{{ error }}</span>
                        {% endfor %}
                    </div>
                {% else %}
                    {{ form.var1(class="form-control form-control-lg") }}
                {% endif %}
            </div>


        </fieldset>
        <div class="form-group">
            {{ form.submittool(class="btn btn-outline-info") }}
        </div>
    </form>
</div>
<div class="border-top pt-3">
    <small class="text-muted">
        Learn More <a class="ml-2" href="{{ url_for('about') }}">About</a>
    </small>
</div>
<div class="media-body">

    <div class="article-metadata">
        <a class="mr-2" href="#">{{ newdata }}</a>
        <small class="text-muted">{{ newdata }}</small>
    </div>
<p> {{ newdata }} </p>
</div>
{% endblock content %}

У меня вопрос: как я могу передать переменную из функции Python в HTML и отобразить ее на веб-странице?

Ответы [ 2 ]

1 голос
/ 23 июня 2019

Если вы успешно заполнили newlist, то внутри mainfunc, вы можете вернуть следующее:

return render_template('tool2.html', title='Tool-Active', form=form, mynewlist=newlist)

Затем, внутри вашего tool2.html представления вы можетеповторить этот возвращаемый список следующим образом:

<ul>{% for item in mynewlist %}
  <li>item</li>
  {% endfor %}
</ul>
0 голосов
/ 26 июня 2019

Похоже, Flask не любит вложенные функции.Я заставил его работать, просто удалив вызов функции в условном выражении, и вместо этого просто поместив код функции в условное выражение, например:

if form.validate_on_submit():
    newdata = []

    for i in list(range(2)):

        maindata = [inte.text for inte in soup.find('div', {'id':'main-content'}).find_all('a', {'class': 'main-info'})]

        if var1 == 'x':
            for i2 in maindata:
                rda = i2 
                newdata.append(rda)
        elif var1 == 'y':
            for i3 in maindata:
                rda = "-" + i3 + "-"
                newdata.append(rda)
        elif var1 == 'z':
            for i4 in maindata:
                rda = '+' + i4 + '+'
                newdata.append(rda)
        else:
            redirect(url_for('tool3')) # <-- This is not working either, if someone wants to be generous and enlighten me on that as well.



    print(newdata)

    testpagecount += 1
...