0001-assets-give-asset_url-templatetag-sorl.thumbnail-opt.patch
combo/apps/assets/templatetags/assets.py | ||
---|---|---|
17 | 17 |
from django import template |
18 | 18 |
from django.db.models.fields.files import ImageFieldFile |
19 | 19 | |
20 |
from sorl.thumbnail.shortcuts import get_thumbnail |
|
21 | ||
20 | 22 |
from ..models import Asset |
21 | 23 | |
22 | 24 |
register = template.Library() |
23 | 25 | |
24 | 26 | |
25 | 27 |
@register.simple_tag |
26 |
def asset_url(*args): |
|
27 |
for asset in args: |
|
28 |
if isinstance(asset, ImageFieldFile): |
|
28 |
def asset_url(*args, **kwargs): |
|
29 |
asset = None |
|
30 |
for asset_object in args: |
|
31 |
if isinstance(asset_object, ImageFieldFile): |
|
29 | 32 |
try: |
30 |
return asset.url
|
|
33 |
asset_object.url
|
|
31 | 34 |
except ValueError: # no associated file |
32 | 35 |
continue |
33 |
if isinstance(asset, basestring): |
|
36 |
asset = asset_object |
|
37 |
break |
|
38 | ||
39 |
if isinstance(asset_object, basestring): |
|
34 | 40 |
try: |
35 |
asset = Asset.objects.get(key=asset) |
|
41 |
asset = Asset.objects.get(key=asset_object).asset |
|
42 |
break |
|
36 | 43 |
except Asset.DoesNotExist: |
37 | 44 |
continue |
38 |
return asset.asset.url |
|
39 |
return '' |
|
45 | ||
46 |
if isinstance(asset_object, Asset): |
|
47 |
asset = asset_object.asset |
|
48 |
break |
|
49 | ||
50 |
if not asset: |
|
51 |
return '' |
|
52 | ||
53 |
geometry_string = kwargs.pop('size', None) |
|
54 |
if not geometry_string: |
|
55 |
return asset.url |
|
56 | ||
57 |
return get_thumbnail(asset, geometry_string, **kwargs).url |
|
40 | 58 | |
41 | 59 | |
42 | 60 |
@register.assignment_tag |
tests/test_public_templatetags.py | ||
---|---|---|
157 | 157 |
page.picture = File(StringIO('test'), 'test2.png') |
158 | 158 |
page.save() |
159 | 159 |
assert t.render(Context({'page': page})) == '/media/page-pictures/test2.png' |
160 | ||
161 |
# pass image to sorl.thumbnail |
|
162 |
t = Template('''{% load assets %}{% asset_url page.picture "collectivity:banner" size="200x200" %}''') |
|
163 |
assert t.render(Context()).startswith('/media/cache/') |
|
160 |
- |