解析服务器上的静态URL

时间:2014-12-30 00:47:23

标签: django

我的所有用户都可以选择关联个人资料照片。有几个模板需要加载此个人资料图片。如果用户尚未上传图片,我们使用默认值。当我想显示此个人资料图片时,我的代码看起来像这样

<img src="{% if user.profile_picture.search_thumbnail.url %}{{ user.profile_picture.search_thumbnail.url }}{% else %}{% static "alternate.jpg" %}{% endif %}">

这对我来说太冗长了,特别是考虑到我需要在多个模板中重复它。我可以使用{%with%}块来存储user.profile_picture.search_thumbnail.url,但这对我的帮助太大了。

我的解决方案是编写一个附加到用户模型的函数,该函数返回静态文件的url。不幸的是,{%static%}是一个模板函数。 {%url%}在服务器上有一个名为django.core.urlresolvers.reverse()的等效函数。 {%static%}标记是否存在备选方案?

如果有人问,我想使用静态函数,因为我的静态文件存储在不同的地方,具体取决于环境。我的开发机器在本地提供文件,而我的PRD机器提供来自s3的静态文件。

谢谢你, 尼克

2 个答案:

答案 0 :(得分:1)

为什么不写一个过滤器,以便你可以这样做。

<img src="{{ user.profile_picture.search_thumbnail.url|custom_filter }}">

并在custom_filter中从settings.STATIC_URL中读取,以返回未设置用户的正确URL。

你可以使滤镜更短,就像这样

<img src="{{ user|user_pic_url }}">

并在过滤器中拉出.profile_picture.search_thumbnail.url / checks

答案 1 :(得分:0)

这就是static模板标签下面的内容,您可以在自己的代码中使用它:

from django.contrib.staticfiles.storage import staticfiles_storage

def static(path):
    return staticfiles_storage.url(path)