From a26e3b57f5f19c7ca4f4c5aaa163ad658605e3e5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20P=C3=A9ters?= Date: Mon, 2 Jul 2018 20:18:13 +0200 Subject: [PATCH] assets: give asset_url templatetag sorl.thumbnail options (#24943) --- combo/apps/assets/templatetags/assets.py | 34 ++++++++++++++++++------ tests/test_public_templatetags.py | 4 +++ 2 files changed, 30 insertions(+), 8 deletions(-) diff --git a/combo/apps/assets/templatetags/assets.py b/combo/apps/assets/templatetags/assets.py index 8065d71..03938d3 100644 --- a/combo/apps/assets/templatetags/assets.py +++ b/combo/apps/assets/templatetags/assets.py @@ -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 diff --git a/tests/test_public_templatetags.py b/tests/test_public_templatetags.py index 1c3d572..18eb634 100644 --- a/tests/test_public_templatetags.py +++ b/tests/test_public_templatetags.py @@ -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/') -- 2.18.0