Python Flask输出下拉值到页面

时间:2019-05-01 23:50:46

标签: python flask

我有两个带有多个键的字典,每个键都有一个值。一个字典有每周的累积工作时间,其他有每周的累积加班时间。关键是日期时间对象,该对象被计算为一周的开始。我的网页上有一个下拉框,其中包含星期几开始

  <form action="{{ url_for('index') }}" method="post">
    <select class="form-control" name="cumuls" id="select1" onchange="if(this.value != 0) { this.form.submit(); }">
        <option value="0">Cumulative for week beginning...</option>
        {% for i,j in zip(wks, wks2) %}
        <option value="{{ i }}">{{ j }}</option>
        {% endfor %}
    </select>
  </form>

({wks2只是wks的一种格式良好的版本,而wks只是字典中作为日期时间对象的键的列表(字典具有相同的键) )

我希望能够从下拉框中单击一个选项,并使两个字典中的相应值出现在下拉框下方。

在if是索引函数的结尾之后,我在这里处理表单(在index()函数中):

if request.method == 'POST':
    if 'cumuls' in request.form:
        week_Begin = request.form['cumuls']
        listHours = listDates(current_user.get_id())
        dct_hours, dct_overtime, wks = weeklySum2(listHours)

        #strfdelta is a custom function that formats timedeltas
        cumul_hrs = strfdelta(dct_hours[datetime.fromisoformat(week_Begin)], '%H:%M')

        cumul_overtime = strfdelta(dct_overtime[datetime.fromisoformat(week_Begin)], '%H:%M')

        return redirect(url_for('index'))

listHours = listDates(current_user.get_id())

dct_hours, dct_overtime, wks = weeklySum2(listHours)
print(wks)
# wkbgn = weekbeginning, this just formats the dates nicely
wks2 = [wkbgn.strftime('%A') + ' ' + wkbgn.strftime('%-d') + ' ' + wkbgn.strftime('%b') + ' ' + wkbgn.strftime('%Y') for wkbgn in wks]

currentDay = datetime.today()
start_week = (currentDay - timedelta(days=currentDay.weekday()))

return render_template('index.html', form=form, hoursDb = listHours, dct_overtime=dct_overtime,dct_hours=dct_hours, wks=wks, wks2=wks2, zip=zip)

因此,在if 'cumuls'...内,我基本上在cumul_hrscumul_overtime中获得了所选星期的累积工作时间和加班时间。我实质上希望这些变量显示在网页上(在下拉框下方),并且显示的默认变量将是到目前为止的当前周数。我该怎么办?

非常感谢任何指针/技巧。

1 个答案:

答案 0 :(得分:0)

我最终只是将elif语句中的重定向更改为

return redirect(url_for('index', cumul_hrs=cumul_hrs, cumul_overtime=cumul_overtime))

,然后使用以下方法从URL中获取变量:

cumul_hrs, cumul_overtime = request.args.get('cumul_hrs'), request.args.get('cumul_overtime')

并通过render_template