我的应用包含大量图片文件夹结构。在制作中,图像由CDN提供。在开发中,我们在开发服务器上提供了一小部分可用图像。
我熟悉使用url_for
来提供/ static文件夹中的文件:
<img src="{{ url_for('static', filename='images/logo.png') }}"/>
我想只将/ static文件夹用于应用程序的东西(比如js,css和图像,例如徽标和按钮图标 - 与模板一起使用的东西)
应用程序的主要数据是图像的巨大回购。这是在CDN上,而不是源代码。
我想这样做:
<img src="{{ url_for('image_repo', filename=viewmodel.imagename) }}"/>
并将其转化为此:
开发:
http://devbox/folder/images/blahblah.png
生产:
http://cdn.domain.com/bucket/blahblah.png
Flask文档讨论了如何创建端点函数。我做得不对,因为它引发了一个错误。错误不在此端点函数上,而是在url_for上。它说“werkzeug.routing.BuildError”并告诉我:BuildError: ('image_repo', {'filename': u'blahblah.png'}, None)
这是我的端点功能。我知道这是错的。
@app.endpoint('image_repo')
def image_repo(filename):
# use settings to figure out if this is dev or prod
# then what ????
pass
答案 0 :(得分:1)
我担心您无法使用url_for
创建指向其他主机(无子域)的链接。但是你可以创建自己的函数并使用它:
import urlparse
def image_repo_url_for(filename):
if app.config['PRODUCTION']:
return urlparse.urljoin(app.config['IMG_HOST_PROD'], filename)
else:
return urlparse.urljoin(app.config['IMG_HOST_DEV'], filename)
并将其添加到jinja:
app.jinja_env.globals.update(image_repo_url_for=image_repo_url_for)