【问题标题】:Is it possible to use Bottle's/Flask's statement and functions from within a template?是否可以在模板中使用 Bottle/Flask 的语句和函数?
【发布时间】:2019-03-01 11:13:11
【问题描述】:

我想知道我是否可以使用模板中的static_file(),如下所示:

{{ static_file( filename, root=filepath, download=True ) }}

可以这样写吗?

如果可以,那么我将如何替换语句中的变量,在我的例子中,filenamefilepath 的值取自 wsgi python 文件?

一般来说,我们是否能够在模板系统中使用 Bottle 的框架语句和函数,或者我们可以从 wsgi python 应用程序中使用?!

【问题讨论】:

标签: python python-3.x flask bottle


【解决方案1】:

静态文件是一个路由选项,它实际上并不提供文件。您可以只返回打开的文件二进制数据,但是使用函数并使用 javascript 提示下载。

【讨论】:

  • static_file( filename, root=filepath, download=True 用于提供文件,os 这个函数用于这个原因。
  • static_file 是一个提供文件的辅助函数。它只是将请求路由到静态文件。您不能在模板中使用它,因为它需要函数返回调用作为 HTML 正文请求。不仅仅是数据的二进制表示。因此,我的观点实际上是对文件的路由请求,而不是文件的实际表示。
  • 是的,我们可以同意,它是一个指向文件的路由请求。
  • 这也是它在您的模板中不起作用的原因。它必须是 HTML 返回调用。使用文件的二进制形式,然后注入 javascript 以启动下载过程。
【解决方案2】:

不,static_file 用于返回静态文件;模板用于返回动态内容。它们不能互操作。

您在代码(路由处理程序)中使用static_file不是在模板中。

例如(from the documentation),

@route('/static/<filepath:path>')
def server_static(filepath):
    return static_file(filepath, root='/path/to/your/static/files')

【讨论】:

  • 这就是我打算使用它的方式,这种方式效果很好,是的,但问题是我想打印一些首先存储在变量 pdatareturn static_file(filepath, root='/path/to/your/static/files') 中的 html 数据只是出错了.所以,为了避免这个问题,我不得不使用模板作为中间人。如果我可以在不使用模板的情况下做到这一点,请告诉我如何。
  • 您的想象是不可能的。因此,我对您的问题的回答是,“可以这样写吗?”
  • 您前几天提到了一些关于将 pdata 包装在 static_file 中的内容。你能澄清一下吗?我真的不想为此使用模板。
  • ?这是不可能的。恐怕你对 HTTP 有误解。
  • 所以,模板用法就是这样。我返回一个模板,然后在最后一行打印我想要的 html 数据后使用该模板,我已经放置了这个:&lt;meta http-equiv="REFRESH" content="5;{{ filepath }}"&gt; 下载文件 okey,但是当 ti 涉及 .pdf 文件时,它会在浏览器中打开它们而不是下载他们。如果您想出更好的解决方案,请告诉我!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-03-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-21
  • 1970-01-01
相关资源
最近更新 更多