【问题标题】:Flask blueprints routes double dot issueFlask 蓝图路由双点问题
【发布时间】:2021-08-04 09:02:35
【问题描述】:

我正在构建一个非常基本的 Python-Flask 应用程序。为了不让我的代码太杂乱,我想使用蓝图将路由分成与特定功能(例如用户管理)相关的单独文件。 以下代码工作正常:

app.py:

from user_routes import usr_routes
app = Flask(__name__)
app.register_blueprint(usr_routes, url_prefix="/")

user_routes.py

from flask import Blueprint

usr_routes = Blueprint("", __name__)

@usr_routes.route("/users")
def users():
    return "Not implemented yet"

menu.html:

<li class="nav-item dropdown">
            <a class="nav-link dropdown-toggle" href="#" id="navbarDropdown" role="button" data-bs-toggle="dropdown" aria-expanded="false">
              Users
            </a>
            <ul class="dropdown-menu" aria-labelledby="navbarDropdown">
              <li><a class="dropdown-item" href="{{url_for('..users')}}">Users</a></li>
              <li><a class="dropdown-item" href="{{url_for('new_user')}}">New User</a></li>
              <li><hr class="dropdown-divider"></li>
            </ul>
          </li>

文件夹结构:

Project
|--app.py
|--user_routes.py
|--templates
|  |-menu.html
|  |-base.html

问题: 为什么我需要在 users 前面的 HTML 文件中添加两个点? 如果我不这样做,我会收到以下错误: werkzeug.routing.BuildError:无法为端点用户构建 url。你是说 .users 吗?

【问题讨论】:

    标签: python flask web-applications


    【解决方案1】:

    相对导入使用点符号来指定位置。单个点表示引用的模块或包与当前位置位于同一目录中。两个点表示它在当前位置的父目录——即上面的目录中。

    【讨论】:

    • 那我有点糊涂了。考虑到,“new_user”是在 app.py 中定义的(我还没有移动它),它相对于 main.html 的位置与 user_routes.py 文件中的“users”路由相同,但是没有完全需要点并且它有效。我错过了什么?
    • “The menu.html”是指问题中的 main.html?
    • 是的,对不起。它应该是 menu.html
    • 你在 github 或其他地方有存储库吗?我想查看所有代码,尤其是 new_users。
    猜你喜欢
    • 2018-05-07
    • 2015-07-05
    • 2021-02-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-25
    • 1970-01-01
    • 2012-09-14
    相关资源
    最近更新 更多