jinja2.exceptions.UndefinedError: 'form' - неопределенная ошибка в python, Flask - PullRequest
0 голосов
/ 09 мая 2020

Я новичок в Flask и занимаюсь программированием уже 3 недели.

Я получаю: «jinja2.exceptions.UndefinedError: 'form' is undefined error», и я не знаю, как это решить.

Мой основной app.py: это просто соответствующий раздел

 @app.route("/form", methods=["GET", "POST"])
def forms():
    global reverse_exchange_rate, exchange_rate
    form = CurrencyForm
    if request.method == 'GET':
        return render_template("form.html")

и моя форма. html:

{% extends "layouts/main.html" %}
{% from "formhelper.html" import render_field %}

{% block content %}

    <form method="GET" action="/form">
        <div style="text-align: center">
            <h1>Currency Exchange</h1>
            {{ form.csrf_token }}
            {{ render_field(form.currency_1) }}
            {{ render_field(form.currency_2) }}
            {{ render_field(form.exchange_rate) }}
            {{ render_field(form.submit) }}
        </div>
    </form>

{% endblock %}

Я получаю эту ошибку:

File "c:\users\sport\documents\flask attempt 2\venv\lib\site-packages\flask\app.py", line 2464, in __call__
return self.wsgi_app(environ, start_response)
File "c:\users\sport\documents\flask attempt 2\venv\lib\site-packages\flask\app.py", line 2450, in wsgi_app
response = self.handle_exception(e)
File "c:\users\sport\documents\flask attempt 2\venv\lib\site-packages\flask\app.py", line 1867, in handle_exception
reraise(exc_type, exc_value, tb)
File "c:\users\sport\documents\flask attempt 2\venv\lib\site-packages\flask\_compat.py", line 39, in reraise
raise value
File "c:\users\sport\documents\flask attempt 2\venv\lib\site-packages\flask\app.py", line 2447, in wsgi_app
response = self.full_dispatch_request()
File "c:\users\sport\documents\flask attempt 2\venv\lib\site-packages\flask\app.py", line 1952, in full_dispatch_request
rv = self.handle_user_exception(e)
File "c:\users\sport\documents\flask attempt 2\venv\lib\site-packages\flask\app.py", line 1821, in handle_user_exception
reraise(exc_type, exc_value, tb)
File "c:\users\sport\documents\flask attempt 2\venv\lib\site-packages\flask\_compat.py", line 39, in reraise
raise value
File "c:\users\sport\documents\flask attempt 2\venv\lib\site-packages\flask\app.py", line 1950, in full_dispatch_request
rv = self.dispatch_request()
File "c:\users\sport\documents\flask attempt 2\venv\lib\site-packages\flask\app.py", line 1936, in dispatch_request
return self.view_functions[rule.endpoint](**req.view_args)
File "C:\Users\sport\Documents\Flask Attempt 2\app.py", line 21, in forms
return render_template("form.html")
File "c:\users\sport\documents\flask attempt 2\venv\lib\site-packages\flask\templating.py", line 140, in render_template
ctx.app,
File "c:\users\sport\documents\flask attempt 2\venv\lib\site-packages\flask\templating.py", line 120, in _render
rv = template.render(context)
File "c:\users\sport\documents\flask attempt 2\venv\lib\site-packages\jinja2\environment.py", line 1090, in render
self.environment.handle_exception()
File "c:\users\sport\documents\flask attempt 2\venv\lib\site-packages\jinja2\environment.py", line 832, in handle_exception
reraise(*rewrite_traceback_stack(source=source))
File "c:\users\sport\documents\flask attempt 2\venv\lib\site-packages\jinja2\_compat.py", line 28, in reraise
raise value.with_traceback(tb)
File "C:\Users\sport\Documents\Flask Attempt 2\templates\form.html", line 2, in top-level template code
{% from "formhelper.html" import render_field %}
File "C:\Users\sport\Documents\Flask Attempt 2\templates\layouts\main.html", line 26, in top-level template code
Open an interactive python shell in this frame{% block content %}{% endblock %}
File "C:\Users\sport\Documents\Flask Attempt 2\templates\form.html", line 9, in block "content"
{{ form.csrf_token }}
File "c:\users\sport\documents\flask attempt 2\venv\lib\site-packages\jinja2\environment.py", line 471, in getattr
return getattr(obj, attribute)
jinja2.exceptions.UndefinedError: 'form' is undefined

Я попытался удалить этот раздел кода python, и все работает гладко. Но если я верну его обратно, я получу эту ошибку.

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

Форма. html находится в папке шаблонов, и структура файлов правильная.

Любая помощь приветствуется. Пожалуйста, помните, что я занимаюсь кодированием около 3 недель.

1 Ответ

1 голос
/ 09 мая 2020

Как вы можете видеть в нижней части трассировки стека, UndefinedError происходит из строки шаблона {{ form.csrf_token }}, где шаблон ожидает переменную с именем form, но такая переменная ему не была передана. Способ приблизиться к этому в Flask состоит в том, чтобы явно передать все переменные, которые потребуются шаблону в качестве аргументов ключевого слова в функции render_template, например, render_template("form.html", form=form).

См. соответствующий раздел Официальное руководство по быстрому запуску для более подробной информации.

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