代码之家  ›  专栏  ›  技术社区  ›  Oamar Kanji

如何从另一个模板中包含的模板在烧瓶中呈现WTF表单?

  •  0
  • Oamar Kanji  · 技术社区  · 7 年前

    我想在我家里加入WTF表格的模板。类似这样的html页面:{%include“users/register.html”%},同时保留呈现主页的代码。html和表单注册表。html分隔,如下所示。

    我有一个主页“主页”。正在由“我的”应用程序中的“index()”函数路由的html。“py”文件。

    '应用程序。py'还注册了在“视图”中定义的蓝图“user\u blueprint”。“py”文件。

    我有一个函数“sign\u up”,它在名为“register”的模板中呈现wtf表单。html'。

    在家里。html我想这样做:{%include“users/register.html”%}。我的理解是,这不起作用,因为表格并没有传递给家庭。html,包括注册。主页中的html。html本质上类似于复制它,表单对象不会传递到主页。html

    如何呈现模板寄存器。在维护蓝图(而不仅仅是将表单复制到“index()”中)时使用html?虽然这可能不是最好的方法,但在这种情况下,您有什么建议?谢谢

    应用程序。py公司

    import...
    
    app = Flask(__name__)
    app.config.from_object('config')
    app.secret_key = "123"
    
    UPLOAD_FOLDER = os.path.join(app.root_path, 'static/img/products/')
    app.config['UPLOAD_FOLDER'] = UPLOAD_FOLDER
    
    
    @app.before_first_request
    def init_db():
        Database.initialize()
    
    
    @app.route('/')
    @app.route('/home')
    def index():
        products = Product.find_all()
        return render_template('home.html', title='Home', products=products)
    
    app.register_blueprint(user_blueprint, url_prefix="/users")
    

    视图。py公司

    user_blueprint = Blueprint('users', __name__)
    
    
    class RegisterUser(FlaskForm):
        first_name = StringField('first_name', validators=[DataRequired()])
        last_name = StringField('last_name', validators=[DataRequired()])
        email = StringField('email', validators=[DataRequired()])
        password = StringField('password', validators=[DataRequired()])
    
    
    @user_blueprint.route('/register', methods=['GET', 'POST'])
    def sign_up():
        form = RegisterUser(request.form)
        if request.method == 'POST' and form.validate():
            first_name = form.first_name.data
            last_name = form.last_name.data
            email = form.email.data
            password = form.password.data
            print(first_name)
    
        try:
            if User.register_user(first_name, last_name, email, password):
                session['email'] = email
                return redirect(url_for("index"))
        except UserErrors.UserError as e:
            return e.message
    
        return render_template('users/register.html')  
    
    return render_template('users/register.html', form=form)
    

    登记html

    {% from "_formhelpers.html" import render_field %}
    <form method=post>
        <dl>
            {{ render_field(form.first_name) }}
            {{ render_field(form.last_name) }}
            {{ render_field(form.email) }}
            {{ render_field(form.password) }}
        </dl>
        <p><input type=submit value=register>
    </form>
    

    家html,不包括非相关html

    {% include "users/register.html" %}
    
    1 回复  |  直到 7 年前
        1
  •  1
  •   Daniel da Rocha    7 年前

    我要做的就是把表格传给 home.html 通过 index() 使用 {% include "users/register.html" %} ,然后将表单的操作注册到 sign_up() 处理表单的路由。

    这样,您可以在单独的路径上保持表单的显示和表单的处理。。。然后在 注册() 路由,您可以将用户定向到任何其他页面。