如何在url中传递带有*斜杠*的参数?

Lou*_*ero 3 python flask

我想要做的是在函数的参数中传递日期,然后处理输入。这是它的功能

@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'))
Run Code Online (Sandbox Code Playgroud)

现在,我的问题是我无法在我的函数中传递值。原因是我的输入中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 %}
Run Code Online (Sandbox Code Playgroud)

现在,当我尝试单击确认按钮时,得到的响应是Error 404 not found. 404错误的url为:http://localhost:5000/confirm_sickLeave/02/01/2015%3B02/02/2015/seer

我可以做任何其他选择吗?谢谢你的贡献。:)

Mar*_*ers 6

斜杠在 URL 路径中具有意义,因此路径部分的默认转换器明确排除了斜杠。

您有两个选择:

  • 显式匹配日期的单独部分并重新构成:

    @HR.route('/confirm_sickLeave/<year>/<month>/<day>/<user>', methods=['GET', 'POST'])
    def confirm_sickLeave(user, year, month, day):
        date = '/'.join([year, month, day])
    
    Run Code Online (Sandbox Code Playgroud)
  • 格式化您的日期以使用不同的分隔符,例如-.

可以将路径中的斜线与path转换器 (so /confirm_sickLeave/<path:date>/<user>) 匹配,但这意味着您现在可以匹配路径中的任意数量的斜线,从而使验证更加困难。