gpt4 book ai didi

python - 控制 Flask 应用程序中的 URL 顺序

转载 作者:太空宇宙 更新时间:2023-11-03 18:52:25 24 4
gpt4 key购买 nike

这是一个 Python/Flask 问题。

更新:今天早上我醒来时有一种不好的预感,这是正确的。 Flask 不会在源代码中创建这些奇怪的 href - 前置是在执行期间发生的。我一直在查看将鼠标悬停在链接上时显示的链接地址。今天我在生成的源代码中检查了它们,它们很好 - 与我生成的完全相同。

所以现在我的问题是:当我从一个项目移动到下一个项目时,为什么运行时进程会构建某种 float 基本 URL?我如何关闭它 - 或者告诉 Flask 重置到原始根应用程序目录?

= = = = =

我正在尝试生成一个包含相关网页引用的网页。这些页面以树状结构组织,所有项目都位于一个级别,每个项目下有多个页面。对于显示的每个页面,我想显示一个侧边栏,列出所有项目以及每个项目下的所有页面以及显示的每个页面的链接。

我的views.py程序设置如下:

@app.route('/')
@app.route('/abc')
@app.route('/abc/<projectName>')
@app.route('/abc/<projectName>/<pageName>')
@app.route('/<projectName>/<pageName>')
def abc_pages(projectName=None, pageName=None):
.
. [includes creating anchor tags]
.

我的问题是,当我的 URL 同时包含项目名称和页面名称时,我创建的 anchor 标记会将项目名称添加到它们前面。例如,我可以使用仅包含项目名称的 URL 访问默认页面,如下所示:“example.com:5000/abc/projectA”。在该页面上,生成的 anchor 标记与预期的 href 类似“example.com:5000/abc/projectB/page_b2”。

但是,如果我使用同时包含项目名称和页面名称的 URL(例如“example.com:5000/abc/projectA/page_a1”)访问页面,则 anchor (与之前一样生成)如下所示:“example.com” com:5000/abc/projectA/projectB/page_b2”。

经过漫长而令人沮丧的搜索后,没有找到解决方案,我顺其自然,然后像这样删除了有问题的项目名称:

@app.route('/')
@app.route('/abc')
@app.route('/abc/<projectName>')
@app.route('/abc/<projectName>/<pageName>')
@app.route('/<projectName>/<pageName>')
@app.route('/abc/<noName>/<projectName>/<pageName>') <<--- new code here
def abc_pages(noName=None, projectName=None, pageName=None):
.
. [includes creating anchor tags]
.

没有喜悦。这只能让我解决问题的一次迭代。我可以点击格式错误的“example.com:5000/abc/projectA/projectB/page_b2”,但 page_b2 上生成的 anchor 标记看起来像“example.com:5000/abc/projectA/projectB/ProjectC/page_c3”。

所以我的问题是为什么生成的 anchor 标记会将此历史记录(但只有projectName历史记录)添加到它们前面。我每次都为 anchor 标记生成相同的代码,但 href 不断扩展。

最佳答案

Flask 友好的生成链接的方式是通过使用 url_for ,因为这消除了您必须知道如何构建路由的依赖性。

示例:

link = url_for("abc_pages", projectName = "project_B", pageName = "page_B2")

如果您以这种方式生成链接,则无需担心,它们将始终是正确的。如果稍后您决定更改路线,url_for 也会自行更新。

也就是说,您手工生成的路线所遇到的问题很可能是您通过不以 / 开头来使它们相对。不以 / 开头的链接与浏览器地址栏中显示的 URL 相关,例如,如果您的浏览器位于 /project_A 并且您有一个指向 project_B/page_B2 的链接,浏览器会将这两个链接连接起来并转到 /project_A/project_B/page_B2。相反,如果您将链接编写为 /project_B/page_B2,那么这是一个绝对 URL,因此浏览器将丢弃旧路径并使用此路径作为新 URL。

关于python - 控制 Flask 应用程序中的 URL 顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18037753/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com