使用 bottle.py,如何正确呈现模板的静态文件请求?

With bottle.py, how do I properly render static file requests of templates?

我正在试验 bottle.py,我在请求静态模板和呈现静态模板时遇到了一些问题。

我有一些基本路线:

@route("/feed")
def show_feed():
    # query database, calculate things, etc.
    # code to show feed (which is dynamic)

@route("/submit")
def show_submit():
    # query database, calculate things, etc.
    # code to show submit

@route("/<filename:path>")
def serve_static(filename):
    # code to simply return static files

我还有一些模板:

views/submit.html
views/feed.html

网络服务器本身没有问题。它按说明工作。问题是当我像往常一样在我的模板中使用 links 从一页转到另一页时:

<a href="feed.html">Go back to the feed</a>

当用户点击 link 或手动输入“.../feed.html”或“.../submit.html”时,URL .../feed.html 被请求而不是 /feed,Bottle 将其路由到 serve_static(filename) 函数。结果,模板没有被渲染——相反,返回了静态模板,其中包含诸如“{{article[0]}}”和“% end % end”之类的丑陋内容。

如何让 Bottle 正确渲染这些模板?

当模板被请求为静态文件时,有没有办法让 Bottle 知道何时渲染模板?将 href 属性更改为服务器应该期望的属性是否被认为是一种好的做法?有什么我没有考虑的吗?

问题很简单

<a href="feed.html">

根据您的 URL 模式,href 有误。只需将其更改为

<a href="feed">

正如 BrenBarn 所建议的那样,将模板移动到它们自己单独的子目录中,远离您想要提供真正静态 public 文件的子目录也是一个好主意。但是,就其本身而言,这并不能解决您的问题——您只会在点击有问题的 link 时得到 404。核心问题是修复 <a>href!