Oct 31
Satchmo product images
Templatetag for Satchmo creates unordered list for product images. CSS can be applied to customize output.
from django import template
from satchmo.product.models import Product
from satchmo.thumbnail.templatetags.satchmo_thumbnail import thumbnail
try:
from xml.etree.ElementTree import Element, SubElement, tostring
except ImportError:
from elementtree.ElementTree import Element, SubElement, tostring
register = template.Library()
default_opts = {
'thumbnail': 'width=280',
'start': 0
}
class ProductGalleryNode(template.Node):
def __init__(self, product, **opts):
self.product = template.Variable(product)
self.opts = default_opts
self.opts.update(opts)
def render(self, context):
actual_product = self.product.resolve(context)
images = actual_product.productimage_set.all()
start = int(self.opts['start'])
if len(images) <= start: return ("")
root = Element("ul", {'class': self.opts.get('class', '')})
for (i, pic) in enumerate(images[start:]):
li_attr = {'class': 'first'} if not i else {}
li = SubElement(root, 'li', li_attr)
link = SubElement(li, 'a', {'href' : pic.picture.url})
caption = pic.translated_caption()
src = thumbnail(pic.picture.url, self.opts.get('thumbnail'))
img = SubElement(link, 'img', {'src': src, 'alt': caption, 'title': caption})
return tostring(root, 'utf-8')
@register.tag
def product_gallery(parser, token):
""" Returns an unordered list of image thumbnails for product.
Usage:
{% product_gallery product %}
{% product_gallery product thumbnail="width=280"%}
{% product_gallery product start=1%}
{% product_gallery product class=galeria%}
"""
kwargs = {}
bits = token.split_contents()[1:]
product = bits[0]
for bit in bits[1:]:
arg, val = bit.split("=", 1)
kwargs[str(arg)] = val.strip('"')
return (ProductGalleryNode(product, **kwargs))
I am Bojan Mihelac and this blog is dedicated to share code, thoughts, tools and advices I came up with while working at
blog comments powered by Disqus