assets: give asset_url templatetag sorl.thumbnail options (#24943)

This commit is contained in:
Frédéric Péters 2018-07-02 20:18:13 +02:00
parent 3c7c7e4aab
commit a26e3b57f5
2 changed files with 30 additions and 8 deletions

View File

@ -17,26 +17,44 @@
from django import template
from django.db.models.fields.files import ImageFieldFile
from sorl.thumbnail.shortcuts import get_thumbnail
from ..models import Asset
register = template.Library()
@register.simple_tag
def asset_url(*args):
for asset in args:
if isinstance(asset, ImageFieldFile):
def asset_url(*args, **kwargs):
asset = None
for asset_object in args:
if isinstance(asset_object, ImageFieldFile):
try:
return asset.url
asset_object.url
except ValueError: # no associated file
continue
if isinstance(asset, basestring):
asset = asset_object
break
if isinstance(asset_object, basestring):
try:
asset = Asset.objects.get(key=asset)
asset = Asset.objects.get(key=asset_object).asset
break
except Asset.DoesNotExist:
continue
return asset.asset.url
return ''
if isinstance(asset_object, Asset):
asset = asset_object.asset
break
if not asset:
return ''
geometry_string = kwargs.pop('size', None)
if not geometry_string:
return asset.url
return get_thumbnail(asset, geometry_string, **kwargs).url
@register.assignment_tag

View File

@ -157,3 +157,7 @@ def test_asset_template_tags():
page.picture = File(StringIO('test'), 'test2.png')
page.save()
assert t.render(Context({'page': page})) == '/media/page-pictures/test2.png'
# pass image to sorl.thumbnail
t = Template('''{% load assets %}{% asset_url page.picture "collectivity:banner" size="200x200" %}''')
assert t.render(Context()).startswith('/media/cache/')