2013-06-20 32 views
8

新手问题。Python烧瓶忍者镜像文件未找到

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

该模板在css/image目录中包含图像。直接在Firefox浏览器中将模板视为文件时,该图像可见。

但不执行瓶时:

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。 图像的路径似乎未知。我如何设置路径?

+0

你有没有设置的路径所推荐的教程? – debianplebian

+0

如果你使用的是virtualenv,你可以通过从命令行执行'pip freeze'来查看你使用的是哪个版本的jinja和flask。 – richsilv

回答

7

请参阅Flask文档的this section

从您的模板是指静态文件的正确方法是:

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

这是一个救生员,非常感谢 –

18

对于瓶,你应该保持静态文件通常是一个文件夹下的“静态”,然后使用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"> 

此外,解答有关神社问题版本等,检查了这一点

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

+1

非常感谢。这是kob – Bernard

+0

如果有效,请接受其他人看到的答案。 – codegeek

+0

非常感谢。这有帮助! –