我的所有用户都可以选择关联个人资料照片。有几个模板需要加载此个人资料图片。如果用户尚未上传图片,我们使用默认值。当我想显示此个人资料图片时,我的代码看起来像这样
<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的静态文件。
谢谢你, 尼克
答案 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)