Flask会话变量传递给WTForms

0 投票
1 回答
1279 浏览
提问于 2025-04-18 12:44

我在尝试把Flask的会话变量传递给WTForms时遇到了错误。我查阅了很多资料和文档,但还是不太明白正确的方法是什么。我对网页开发完全是个新手,肯定有一些概念我还没搞清楚。

users_department是一个Flask的会话变量,用来填充一个WTForm,这个表单里有一个选择框(wtforms.SelectField),列出了项目负责人。但是,当我调用这个Flask会话变量时,出现了一个错误:RunTimeError: working outside of request context。

下面是我的代码。

import wtforms
import flask

def get_team_members():
    user_department =  flask.session.get('user_department')
    # run SQLite query to find team members based on the variable user_department
    # create a list from the SQLite results
    return team_results

@app.route('/manage', methods=['GET', 'POST'])
def manage():
    form = ProjectForm(request.form) #Call the project form to display
    #The line below causes the error but it works if hard coded with a department
    form.project_lead.choices = get_team_members() #Get team members for user
    return render_template('manage.html', form = form)

class ProjectForm(wtforms.Form):
    project_lead = wtforms.SelectField(u'Project Lead',
                                   validators=[wtforms.validators.optional()])

1 个回答

1

我找到了修复的方法。不要在调用WTforms之后再调用flask的会话。下面是需要修改的部分。

@app.route('/manage', methods=['GET', 'POST'])
def manage():
    team = get_team_members() #Get team members for user
    form = ProjectForm(request.form) #Call the project form to display
    form.project_lead.choices = team
    return render_template('manage.html', form = form)

撰写回答