【问题标题】:Serving Another Static File from One Static File in Flask Web App在 Flask Web App 中从一个静态文件提供另一个静态文件
【发布时间】:2017-06-26 14:15:21
【问题描述】:

在我的网络应用程序中,除了实际的应用程序相关页面(索引和输出)之外,我还有几个其他页面,但这些页面是静态的。例如,一页是“流程”,另一页是“联系”。在所有 HTML 文件的导航栏中,我希望有指向这些页面的链接。我将这些页面作为<li><a href="./static/process.html">Process</a></li><li><a href="./static/contact.html">Contact</a></li> 提供服务。

当从索引页面点击这些链接时,我可以访问这些页面中的任何一个 - 没问题。但是,如果我在“进程”页面并单击“联系人”链接,则会收到错误消息,因为地址栏显示它正在尝试访问 http://localhost:5000/static/static/contact.html。我认为我向这些静态页面添加链接的方式可能是错误的。实现这一目标的最佳和正确方法是什么?

【问题讨论】:

    标签: python flask


    【解决方案1】:

    在路径中包含./ 表示“来自当前目录”。

    因此,您试图从static 目录中进入static 目录。在两个静态页面之间链接时删除./static

    【讨论】:

    • 当然,这是一种方法。但这似乎不可扩展。我想知道是否有更标准的方法,它将引导浏览器或 python 从static 文件夹中获取/提供页面。
    • 你的意思是你不想每次都手动编辑锚路径?您可以只放置绝对(完整)路径,而不是相对链接。
    • 这是个好主意!我可以为本地系统做到这一点。如果我在 AWS 上托管此 Web 应用程序,您能否建议如何执行此操作?感谢您的帮助。
    【解决方案2】:

    我相信这就是你要找的。​​p>

    How to serve static files in Flask

    # index.html
    <a href="{{ url_for('static', filename='process.html') }}">link</a>
    

    然后正如 Jason 所说,您需要从 process.html 中的链接中删除“./”并联系 html。

    # process.html
    <a href="/static/contact.html">link</a>
    # contact.html
    <a href="/static/process.html">link</a>
    

    就使用 AWS 提供文件而言,有很多不同的方式,但有一个烧瓶扩展,可以很容易地通过 S3 提供服务。 https://flask-s3.readthedocs.io/en/latest/

    当从 process.html 链接到 contact.html 时,此解决方案将无法轻松扩展,反之亦然,因为链接不是动态生成的。解决这个问题的唯一方法是使它们成为模板并通过路由呈现和返回。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-09-19
      • 2023-03-06
      • 2015-11-03
      相关资源
      最近更新 更多