Rendering Forms in Templates
You can render forms manually (recommended for control) or use quick rendering.
Manual rendering (recommended)
Template example:
<form method="post">
{{ form.hidden_tag() }}
<div>
{{ form.name.label }}
{{ form.name() }}
{% for error in form.name.errors %}
<p class="error">{{ error }}</p>
{% endfor %}
</div>
<div>
{{ form.email.label }}
{{ form.email() }}
{% for error in form.email.errors %}
<p class="error">{{ error }}</p>
{% endfor %}
</div>
{{ form.submit() }}
</form><form method="post">
{{ form.hidden_tag() }}
<div>
{{ form.name.label }}
{{ form.name() }}
{% for error in form.name.errors %}
<p class="error">{{ error }}</p>
{% endfor %}
</div>
<div>
{{ form.email.label }}
{{ form.email() }}
{% for error in form.email.errors %}
<p class="error">{{ error }}</p>
{% endfor %}
</div>
{{ form.submit() }}
</form>Adding HTML attributes
{{ form.name(class_="input", placeholder="Your name") }}{{ form.name(class_="input", placeholder="Your name") }}Note: use class_class_ (underscore) because classclass is a Python keyword.
Keeping templates clean
As forms grow, you can move repeated field rendering into a partial:
templates/partials/_field.htmltemplates/partials/_field.html
Then include it for each field.
If this helped you, consider buying me a coffee ☕
Buy me a coffeeWas this page helpful?
Let us know how we did
