Flask中href内url_for未跳转对应路由方法、渲染错误页面问题
问题原因
你为两个功能完全不同的视图函数绑定了相同的URL路径/profile,Flask的路由匹配遵循「先定义先匹配」的规则:
- 先定义的
profile()视图已经声明了接收GET请求的/profile路径 - 点击编辑链接触发的是GET请求,永远会被先注册的
profile()视图拦截,不会触发后续的profile_update()视图
修复方法
- 给
profile_update视图设置独立的路由路径,例如修改为/profile/update,修改后views.py的代码如下:
from flask import Blueprint, render_template, session, redirect, url_for, request from . import db views = Blueprint('views', __name__) @views.route('/profile', methods=(['GET'])) def profile(): if 'username' in session: print('profile page') print(session['username']) loggedInUser = db.users.find_one({'username': session['username']}) return render_template('profile.html', loggedInUser=loggedInUser) else: return redirect(url_for('auth.login')) # 仅修改此处的路由路径即可 @views.route('/profile/update', methods=['GET', 'POST']) def profile_update(): if 'username' in session: print('profile update') return render_template('update_profile.html') else: return redirect(url_for('auth.login'))
- 不需要修改
profile.html中url_for('views.profile_update')的代码,url_for会根据视图函数名自动生成对应新路径的正确链接。
额外注意事项
你当前update_profile.html中的表单action指向的是/auth/signup注册接口,后续开发提交更新资料功能时,记得把此处的action修改为对应处理资料更新的路由,避免提交数据到错误的接口。
内容的提问来源于stack exchange,提问作者Omar_Jandali
相关产品推荐
相关产品推荐

