在 jinja 模板中,我想為表單創建一個類:
{% macro build_form(form) %}
<form class="{{ form.form_class }}" role="form" method="post" action="" class="text-start">
{{ form.hidden_tag() }}
{% for field in form if field.widget.input_type != 'hidden' %}
<div class="{{ field.render_kw.container2_class }}">
<div class="{{ field.render_kw.container1_class }}">
<label class="form-label"> {{ field.label }}</label>
{{ field}}
</div>
...
我想將它作為表單的引數傳遞,例如
user_form = UserForm(obj=user, form_class="row")
但是,它在模板中無法識別。我如何以及在哪里可以發送這些引數。
uj5u.com熱心網友回復:
最簡單的方法是創建一個自定義表單,您可以在其中將類名作為字串關鍵字傳遞kwargs,然后將此表單用作所有需要支持所述類字串的表單的基類。例如:
class CustomForm(Form):
def __init__(self, formdata=None, obj=None, prefix="", data=None, meta=None, **kwargs):
self.form_class = kwargs.pop('form_class', None)
super(CustomForm, self).__init__(formdata, obj, prefix, data, meta, **kwargs)
使用示例:
from flask import Flask, render_template_string
from wtforms import Form, StringField
app = Flask(__name__)
class CustomForm(Form):
def __init__(self, formdata=None, obj=None, prefix="", data=None, meta=None, **kwargs):
self.form_class = kwargs.pop('form_class', None)
super(CustomForm, self).__init__(formdata, obj, prefix, data, meta, **kwargs)
class TestForm(CustomForm):
first_name = StringField()
html_template = '''
<form role="form" method="post" action="">
{{ form.first_name }}
</form>
'''
@app.route('/')
def custom_form():
_form = TestForm(form_class='form-class')
return render_template_string(html_template, form=_form)
if __name__ == '__main__':
app.run()
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/491914.html
