18

新手问题。

我正在使用 Flask,一个 Python 的网络框架。Flask 使用 Jinja 来渲染模板。我不知道 Jinja Flask 使用哪个版本,也不知道如何检索 Jinja 版本或 Flask 版本。我使用 Python 2.7 版。

该模板在 css/image 目录中包含一个图像。直接在 Firefox 浏览器中将模板作为文件查看时,可以看到此图像。

但不是在执行 Flask 时:

from flask import Flask, render_template
app = Flask(__name__)

@app.route('/hello/')
@app.route('/hello/<name>')
def hello(name=None):
    return render_template('Basic.html', name=name)

if __name__ == '__main__':
   app.debug = True
   app.run()

HTML 文件的内容:

 <!DOCTYPE HTML>
 <html>
    <body> 

      <!-- variable example begin -->
      {% if name %}
        <h1>Hello {{ name }}!</h1>
      {% else %}
        <h1>Hello World!</h1>
      {% endif %}

      <!-- variable example end -->

     <img src="css/images/icons/resultset_previous.png" width="16" height="16" alt="previous" title="Previous" border="0">

   </body>
 </html>

模板运行良好,变量示例按预期运行。但图像不显示。调试返回:“GET /hello/css/images/icons/resultset_previous.png HTTP/1.1”404 -

我按照文档中的建议在 VirtualEnv 中运行 Flask。图像的路径似乎未知。如何设置路径?

4

2 回答 2

26

对于 Flask,您通常应该将静态文件保存在“静态”文件夹下,然后使用 url_for 函数。假设您的项目名为“myproject”,使用您的示例,它应该类似于:

myproject/
    app.py
    templates/
    static/
        css/
            images/
                icons/
                    resultset_previous.png

然后在模板中,你可以调用

<img src= {{ url_for('static', filename = 'css/images/icons/resultset_previous.png') }} width="16" height="16" alt="previous" title="Previous" border="0">

另外,要回答您有关 jinja 版本等的问题,请查看此

https://github.com/mitsuhiko/flask/blob/master/.travis-lowest-requirements.txt

于 2013-06-20T17:44:12.230 回答
13

请参阅Flask 文档的这一部分

从模板中引用静态文件的正确方法是:

<img src="{{ url_for('static', filename = 'css/images/icons/resultset_previous.png') }}" width="16" height="16" alt="previous" title="Previous" border="0">
于 2013-06-20T16:55:01.300 回答