Вызов функции python на html-странице - PullRequest
0 голосов
/ 05 ноября 2019

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

Я уже пытался просмотреть документацию jinja2 инесколько других ответов, но это мало помогло.

фляга file.py


    from flask import Flask,render_template,request
    app = Flask(__name__)
    from webscraper import keeda,display_tbl

    @app.route('/', methods=['POST', 'GET'])
    def scraper():
        if request.method == 'POST':
            url = request.form['url']
            df=keeda(url)
            return render_template(('completed.html',display_tbl(df)))
        else:
            return render_template('index.html')
    if __name__ == '__main__':
        app.run()

the completed.html file
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <title>Summary of Scraped Data</title>
</head>
<body>
    <h1>This is what you got! </h1>
<div>
    {{ display_tbl(df) }}
</div>


</body>

</html>

here's the error: jinja2.exceptions.UndefinedError: 'display_tbl' is undefined

i wanted to display a table with values on this page.


1 Ответ

0 голосов
/ 05 ноября 2019

Вы ожидаете большего, чем может сделать для вас jinja2. Пожалуйста, поймите, что jinja2 - это просто способ визуализации шаблонов, которые в конечном итоге являются HTML и Javascript, ничего особенного. Таким образом, в вашем случае вы не можете передать функцию Python в шаблон jinja2 и ожидать, что она будет работать нормально. Здесь вы можете передать данные, возвращаемые display_tbl во время рендеринга шаблона, следующим образом:

def scraper():
    ...
    return render_template(('completed.html', data=display_tbl(df)))  # data= is important because this is how you are going to access your data in the template

…

def display_tbl(df):
    …  # Here you should be returning the data you want to display - a list or dict


В шаблоне

<html>

<head>
    <meta charset="UTF-8">
    <title>Summary of Scraped Data</title>
</head>
<body>
    <h1>This is what you got! </h1>
<div>
    {{ render_data() }}
</div>

<script>
    var d = data | tojson
    function render_data() {
        // implement the logic to handle how your data should be rendered
    }
</script>

</body>

</html>

Это просто грубая идея, но каквы видите, что вам нужно изменить способ восприятия шаблонов jinja2 и их взаимодействие с бэкэндом Python или Flask.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...