我想要做的是在函数的参数内传递日期,然后处理输入。这是它的功能
@HR.route('/confirm_sickLeave/<date>/<user>', methods=['GET', 'POST'])
def confirm_sickLeave(user,date):
u = User.query.filter_by(username=user.username).first()
print u
us = UserStatistics.filter_by(userId=u.id).first()
temp = us.slDates
dates = temp.keys()
for a in dates:
if a == date:
temp['date'] = True
flash('Date Confirmed.')
return redirect(url_for('.approval_of_leaves'))
return redirect(url_for('.approval_of_leaves'))
现在,我的问题是我无法传递函数中的值。原因是我的输入dates
中有斜杠(/
)。让我告诉你:
HTML:
{% for u in all_users %}
## Returns all the dates applied by the user (it's in dict format)
{% set user_info = u.return_sickLeaves(u.username) %}
{% for us in user_info %}
<tr>
<td> {{ u.username }} </td>
<td> {{ us|e }} </td>
{% if us.value|e == True %}
<td class="success">Confirmed</td>
{% else %}
<td class="warning">Pending..</td>
{% endif %}
<td><a href = "{{ url_for('HR.confirm_sickLeave', user=u.username, date= us|e) }}">Confirm</a>
<a href = "#">Deny</a>
</td>
{% endfor %}
</tr>
{% endfor %}
现在,当我尝试点击确认按钮时,我得到的回复是Error 404 not found
。 404错误的网址是:http://localhost:5000/confirm_sickLeave/02/01/2015%3B02/02/2015/seer
我可以做任何替代方案吗?谢谢你的贡献。 :)
答案 0 :(得分:3)
斜杠带有URL路径中的含义,因此路径部分的默认转换器显式排除斜杠。
您有两种选择:
明确匹配日期的各个部分并重新构成:
@HR.route('/confirm_sickLeave/<year>/<month>/<day>/<user>', methods=['GET', 'POST'])
def confirm_sickLeave(user, year, month, day):
date = '/'.join([year, month, day])
格式化日期以使用其他分隔符,例如-
。
你可以匹配路径中的斜杠,使用path
转换器(所以/confirm_sickLeave/<path:date>/<user>
),但这意味着你现在匹配任意数量的斜杠在路径中,使验证更难。