Flask应用中/login路由页面无法显示的问题求助
Flask登录页面无法显示问题排查与解决
问题概述
开发Flask应用时,配置了/login路由实现登录页面功能,但访问http://127.0.0.1:5000/login时登录页面无法正常显示。已创建login.html并继承自带有Bootstrap导航栏的base.html,主应用代码按教程编写但问题未解决。
代码展示
主应用文件
from flask import Flask, redirect, url_for, render_template, request from flask_sqlalchemy import SQLAlchemy app = Flask(__name__) @app.route("/") def home(): return render_template("index.html") @app.route("/login", methods=["GET", "POST"]) def login(): if request.method == "POST": user = request.form["nm"] return redirect(url_for("user", usr=user)) else: return render_template("login.html") @app.route("/<usr>") def user(usr): return f"<h1>{usr}</h1>" if __name__ == "__main__": app.run(debug=True)
login.html
{% extends "base.html" %} {% block title %}Login Page{% endblock %} {% block content %} <form action="#" method="post"> <p>Name:</p> <p><input type="text" name="nm" /></p> <p><input type="submit" value="submit"/></p> </form> {% endblock %}
base.html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <link rel="stylesheet" href="{{ url_for('static', filename='css/main.css') }}"> <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4.3.1/dist/css/bootstrap.min.css" integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous"> {% block head %}{% endblock %} </head> <body> <nav class="navbar navbar-expand-lg navbar-light bg-light"> <a class="navbar-brand" href="#">FINANCEPAL</a> <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarNavDropdown" aria-controls="navbarNavDropdown" aria-expanded="false" aria-label="Toggle navigation"> <span class="navbar-toggler-icon"></span> </button> <div class="collapse navbar-collapse" id="navbarNavDropdown"> <ul class="navbar-nav"> <li class="nav-item active"> <a class="nav-link" href="#">Home <span class="sr-only">(current)</span></a> </li> <li class="nav-item"> <a class="nav-link" href="#">Features</a> </li> <li class="nav-item"> <a class="nav-link" href="#">Pricing</a> </li> <li class="nav-item dropdown"> <a class="nav-link dropdown-toggle" href="#" id="navbarDropdownMenuLink" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"> Dropdown link </a> <div class="dropdown-menu" aria-labelledby="navbarDropdownMenuLink"> <a class="dropdown-item" href="#">Action</a> <a class="dropdown-item" href="#">Another action</a> <a class="dropdown-item" href="#">Something else here</a> </div> </li> </ul> </div> </nav> {% block body %}{% endblock %} <script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="anonymous"></script> <script src="https://cdn.jsdelivr.net/npm/popper.js@1.14.7/dist/umd/popper.min.js" integrity="sha384-UO2eT0CpHqdSJQ6hJty5KVphtPhzWj9WO1clHTMGa3JDZwrnQq4sF86dIHNDz0W1" crossorigin="anonymous"></script> <script src="https://cdn.jsdelivr.net/npm/bootstrap@4.3.1/dist/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous"></script> </body> </html>
问题原因与解决方法
核心问题:模板块名称不匹配
base.html中定义的内容插入块是{% block body %},但login.html中使用的是{% block content %}——这个块在父模板中不存在,导致登录表单无法被渲染到页面中。
修复方案(二选一即可)
方案1:修改login.html的块名称
将login.html中的{% block content %}改为{% block body %},修改后代码如下:
{% extends "base.html" %} {% block title %}Login Page{% endblock %} {% block body %} <form action="{{ url_for('login') }}" method="post"> <p>Name:</p> <p><input type="text" name="nm" /></p> <p><input type="submit" value="submit"/></p> </form> {% endblock %}
方案2:在base.html中添加content块
在base.html的<body>部分,新增{% block content %}{% endblock %},比如:
<!-- 保留原有的body块,新增content块 --> {% block body %}{% endblock %} {% block content %}{% endblock %}
额外优化建议
- 将
form的action属性从#改为{{ url_for('login') }},确保表单准确提交到登录路由,避免跳转异常。 - 确认模板文件路径:
login.html和base.html需放在Flask默认的templates文件夹中,且主应用文件与templates文件夹同级。 - 若
static/css/main.css不存在,可暂时删除该链接,避免控制台出现404错误。
内容的提问来源于stack exchange,提问作者Z1latro
相关产品推荐
相关产品推荐

