隐藏标签缺少参数
hidden tag missing argument
我开始使用宏来渲染字段,但有错误,如果我无法验证表单,就会收到此错误。如果我使用正确的凭据,我会被重定向到我应该去的地方,并且不会显示任何错误,如果我无法验证,它会尝试重定向到同一路由,但会引发此错误。
"C:\Users\ulman\PycharmProjects\database_website_optimised\source\database_website\applications\users\views.py", line 43, in post
return render_template(self.template_name, title=self.title, form=self.form_class)
File "C:\Users\ulman\PycharmProjects\database_website_optimised\venv\lib\site-packages\flask\templating.py", line 140, in render_template
ctx.app,
File "C:\Users\ulman\PycharmProjects\database_website_optimised\venv\lib\site-packages\flask\templating.py", line 120, in _render
rv = template.render(context)
File "C:\Users\ulman\PycharmProjects\database_website_optimised\venv\lib\site-packages\jinja2\environment.py", line 1090, in render
self.environment.handle_exception()
File "C:\Users\ulman\PycharmProjects\database_website_optimised\venv\lib\site-packages\jinja2\environment.py", line 832, in handle_exception
reraise(*rewrite_traceback_stack(source=source))
File "C:\Users\ulman\PycharmProjects\database_website_optimised\venv\lib\site-packages\jinja2\_compat.py", line 28, in reraise
raise value.with_traceback(tb)
File "C:\Users\ulman\PycharmProjects\database_website_optimised\source\database_website\applications\users\templates\users\login.html", line 3, in top-level template code
{% from 'macros/_formhelpers.html' import render_field %}
File "C:\Users\ulman\PycharmProjects\database_website_optimised\source\database_website\templates\base.html", line 69, in top-level template code
{% block content %}{% endblock %}
File "C:\Users\ulman\PycharmProjects\database_website_optimised\source\database_website\applications\users\templates\users\login.html", line 9, in block "content"
{{ form.hidden_tag() }}
TypeError: hidden_tag() missing 1 required positional argument: 'self'
127.0.0.1 - - [31/May/2020 11:29:52] "POST /login/ HTTP/1.1" 500 -
这是我的 login.html 文件:
{% extends "base.html" %}
{% from 'macros/_formhelpers.html' import render_field %}
{% block content %}
<div class="container">
<div class="content-section">
<form method="POST" action="">
{{ form.hidden_tag() }}
<fieldset class="form-group">
<legend class="border-bottom mb-4">Log In to your account</legend>
<div>
{{ render_field(form.email) }}
</div>
<div>
{{ render_field(form.password) }}
</div>
<div>{{ form.remember }} {{ form.remember.label }}</div>
</fieldset>
<div class="form-group">
{{ form.submit(class="btn btn-outline-info") }}
</div>
</form>
</div>
<div class="border-top pt-3">
<small class="text-muted">
Have not registered yet? <a href="{{ url_for('users.register') }}">Sign Up</a>
</small>
</div>
</div>
{% endblock %}
这里是宏 _formhelpers.html 文件:
{% macro render_field(field) %}
{{ field.label(class="form-control-label") }}
{{ field(class="form-control form-control-lg") }}
{% if field.errors %}
<ul>
{% for error in field.errors %}
<li>{{ error }}</li>
{% endfor %}
</ul>
{% endif %}
{% endmacro %}
事实证明它与我的 html 文件无关,而是当我再次返回我的登录模板而不是
return render_template(self.template_name, title=self.title, form=self.form_class)
我需要写这个:
return render_template(self.template_name, title=self.title, form=self.form_class())
从这个 post 中得到解决思路:
我开始使用宏来渲染字段,但有错误,如果我无法验证表单,就会收到此错误。如果我使用正确的凭据,我会被重定向到我应该去的地方,并且不会显示任何错误,如果我无法验证,它会尝试重定向到同一路由,但会引发此错误。
"C:\Users\ulman\PycharmProjects\database_website_optimised\source\database_website\applications\users\views.py", line 43, in post
return render_template(self.template_name, title=self.title, form=self.form_class)
File "C:\Users\ulman\PycharmProjects\database_website_optimised\venv\lib\site-packages\flask\templating.py", line 140, in render_template
ctx.app,
File "C:\Users\ulman\PycharmProjects\database_website_optimised\venv\lib\site-packages\flask\templating.py", line 120, in _render
rv = template.render(context)
File "C:\Users\ulman\PycharmProjects\database_website_optimised\venv\lib\site-packages\jinja2\environment.py", line 1090, in render
self.environment.handle_exception()
File "C:\Users\ulman\PycharmProjects\database_website_optimised\venv\lib\site-packages\jinja2\environment.py", line 832, in handle_exception
reraise(*rewrite_traceback_stack(source=source))
File "C:\Users\ulman\PycharmProjects\database_website_optimised\venv\lib\site-packages\jinja2\_compat.py", line 28, in reraise
raise value.with_traceback(tb)
File "C:\Users\ulman\PycharmProjects\database_website_optimised\source\database_website\applications\users\templates\users\login.html", line 3, in top-level template code
{% from 'macros/_formhelpers.html' import render_field %}
File "C:\Users\ulman\PycharmProjects\database_website_optimised\source\database_website\templates\base.html", line 69, in top-level template code
{% block content %}{% endblock %}
File "C:\Users\ulman\PycharmProjects\database_website_optimised\source\database_website\applications\users\templates\users\login.html", line 9, in block "content"
{{ form.hidden_tag() }}
TypeError: hidden_tag() missing 1 required positional argument: 'self'
127.0.0.1 - - [31/May/2020 11:29:52] "POST /login/ HTTP/1.1" 500 -
这是我的 login.html 文件:
{% extends "base.html" %}
{% from 'macros/_formhelpers.html' import render_field %}
{% block content %}
<div class="container">
<div class="content-section">
<form method="POST" action="">
{{ form.hidden_tag() }}
<fieldset class="form-group">
<legend class="border-bottom mb-4">Log In to your account</legend>
<div>
{{ render_field(form.email) }}
</div>
<div>
{{ render_field(form.password) }}
</div>
<div>{{ form.remember }} {{ form.remember.label }}</div>
</fieldset>
<div class="form-group">
{{ form.submit(class="btn btn-outline-info") }}
</div>
</form>
</div>
<div class="border-top pt-3">
<small class="text-muted">
Have not registered yet? <a href="{{ url_for('users.register') }}">Sign Up</a>
</small>
</div>
</div>
{% endblock %}
这里是宏 _formhelpers.html 文件:
{% macro render_field(field) %}
{{ field.label(class="form-control-label") }}
{{ field(class="form-control form-control-lg") }}
{% if field.errors %}
<ul>
{% for error in field.errors %}
<li>{{ error }}</li>
{% endfor %}
</ul>
{% endif %}
{% endmacro %}
事实证明它与我的 html 文件无关,而是当我再次返回我的登录模板而不是
return render_template(self.template_name, title=self.title, form=self.form_class)
我需要写这个:
return render_template(self.template_name, title=self.title, form=self.form_class())
从这个 post 中得到解决思路: