Added. On Dec 3, 2008, at 8:28 AM, Chris Moffitt wrote:
> This is pretty useful. We're trying to collect some of these types > of tips here - > http://www.satchmoproject.com/trac/wiki/SatchmoContribs > > If you could add this, then hopefully it will be easier for folks to > find in the future. > > Thanks, > Chris > > On Wed, Dec 3, 2008 at 6:09 AM, Jack Shedd <[EMAIL PROTECTED]> wrote: > > Wrote a quick custom template tag to do previous/next products. Might > be useful to someone else. > > Use like this: > {% prev_next_products for product as products with 6 others %} > > It'll give you a structure that looks like: > products.previous # if there's a product before this one, this will > equal that product, otherwise, it's set to None > products.next # if there's a product after this one, this will equal > that product, otherwise, it's set to None > products.products # array of the next products, based on how many > "others" you told it to grab > > Code: > --------------------------------------------------------------------------------------------- > import os, logging > from django import template > from django.template import Library, Node, Variable > from django.contrib.sites.models import Site > from satchmo.product.models import Product, ProductManager > > log = logging.getLogger('hssproduct.models') > register = template.Library() > > class ProductOrderNode(Node): > def __init__(self, product, included_count, varname): > self.product = Variable(product) > self.included = included_count > self.varname = varname > def render(self, context, **kwargs): > masterlist = [] > returned = {} > previous, next, found, last = None, None, None, None > self.product = self.product.resolve(context) > > site = Site.objects.get_current() > productlist = Product.objects.filter(active=True, > productvariation__parent__isnull=True) > > for product in productlist: > if product != self.product: > masterlist.append(product) > if found and not next: > next = product > if (len(masterlist) > self.included) and not > found: > masterlist.pop(0) > elif (len(masterlist) >= self.included) and > found: > break > if not found: > if product == self.product: > found = product > previous = last > last = product > > if previous: > returned['previous'] = previous > if next: > returned['next'] = next > if len(masterlist): > returned['products'] = masterlist > log.debug('%s' % masterlist) > context[self.varname] = returned > return '' > > #prev_next_product for product as variable with num others > @register.tag > def prev_next_products(parser, token): > try: > tag_name, for_string, product, as_string, varname, > with_string, > included_count, others_string = token.split_contents() > except: > raise template.TemplateSyntaxError, > 'prev_next_product should be > formatted like: prev_next_product for product as variable with num > others' > return ProductOrderNode(product, included_count, varname) > > > > > > --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Satchmo users" group. To post to this group, send email to [email protected] To unsubscribe from this group, send email to [EMAIL PROTECTED] For more options, visit this group at http://groups.google.com/group/satchmo-users?hl=en -~----------~----~----~----~------~----~------~--~---
