【问题标题】:With bottle.py, how do I properly render static file requests of templates?使用bottle.py,如何正确呈现模板的静态文件请求?
【发布时间】:2015-01-02 03:44:23
【问题描述】:

我正在尝试使用 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

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

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

当用户点击该链接或手动输入“.../feed.html”或“.../submit.html”时,将请求 URL .../feed.html 而不是 /feed,并且 Bottle 路由到serve_static(filename) 函数。结果,模板没有被渲染 - 相反,静态模板被返回,完成像“{{article[0]}}”和“% end % end”这样的丑陋的东西。

如何让 Bottle 正确呈现这些模板?

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

【问题讨论】:

  • 为什么要将模板放在static 目录中,而不是像the documentation 中建议的那样放在views 目录中?
  • 我没有看到那张纸条。我只是将static 目录更改为views,但对问题没有影响。

标签: python bottle


【解决方案1】:

问题很简单

<a href="feed.html">

根据您的 URL 模式,href 有误。改成

<a href="feed">

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

【讨论】:

  • 我输入这个问题的次数越多,对我来说就越明显。但是,我不确定链接到 Web 应用程序路由而不是严格的文件是否是一种标准做法——我从未见过或读过任何关于此的内容。感谢您指出我应该接受的显而易见的事情!
  • 始终链接到您希望访问的 URL!无论如何,很高兴我能帮上忙。
猜你喜欢
  • 2021-11-01
  • 1970-01-01
  • 2017-06-29
  • 1970-01-01
  • 2011-09-04
  • 2011-09-01
  • 2015-04-01
  • 2015-06-18
相关资源
最近更新 更多