You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flask中href内url_for未跳转对应路由方法、渲染错误页面问题

问题原因

你为两个功能完全不同的视图函数绑定了相同的URL路径/profile,Flask的路由匹配遵循「先定义先匹配」的规则:

  • 先定义的profile()视图已经声明了接收GET请求的/profile路径
  • 点击编辑链接触发的是GET请求,永远会被先注册的profile()视图拦截,不会触发后续的profile_update()视图
修复方法
  1. 给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'))
  1. 不需要修改profile.html中url_for('views.profile_update')的代码,url_for会根据视图函数名自动生成对应新路径的正确链接。

额外注意事项

你当前update_profile.html中的表单action指向的是/auth/signup注册接口,后续开发提交更新资料功能时,记得把此处的action修改为对应处理资料更新的路由,避免提交数据到错误的接口。

内容的提问来源于stack exchange,提问作者Omar_Jandali

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 11:45:04