I have no idea if this is the right place to post such a thing, but in an effort to give something back to the community, I would like to post a template tag I developed:
Comments are appreciated, Thanks, Corey -------------------------------------------------- "Tags used by the reservation app" from django import template register = template.Library() def columnize(parser, token): """ Put stuff into columns. Can also define class tags for rows and cells Usage: {% columnize num_cols [row_class [,row_class2...]|'' [cell_class[,cell_class2]]] %} num_cols: the number of columns to format. row_class: can a comma (no spaces, please) separated list that cycles (utilizing the cycle code) can also put in '' for nothing, if you want no row_class, but want a cell_class. cell_class: same format as row_class, but the cells only loop within a row. Every row resets the cell counter. Typical usage: <table border="0" cellspacing="5" cellpadding="5"> {% for o in some_list %} {% columnize 3 %} <a href="{{ o.get_absolute_url }}">{{ o.name }}</a> {% endcolumnize %} {% endfor %} </table> """ nodelist = parser.parse(('endcolumnize',)) parser.delete_first_token() #Get the number of columns, default 1 columns = 1 row_class = '' cell_class = '' args = token.contents.split(None, 3) num_args = len(args) if num_args >= 2: #{% columnize columns %} if args[1].isdigit(): columns = int(args[1]) else: raise template.TemplateSyntaxError('The number of columns must be a number. "%s" is not a number.') % args[2] if num_args >= 3: #{% columnize columns row_class %} if "," in args[2]: #{% columnize columns row1,row2,row3 %} row_class = [v for v in args[2].split(",") if v] # split and kill blanks else: row_class = [args[2]] if row_class == "''": # Allow the designer to pass an empty string (two quotes) to skip the row_class and # only have a cell_class row_class = [] if num_args == 4: #{% columnize columns row_class cell_class %} if "," in args[3]: #{% columnize row_class cell1,cell2,cell3 %} cell_class = [v for v in args[3].split(",") if v] # split and kill blanks else: cell_class = [args[3]] if cell_class == "''": # This shouldn't be necessary, but might as well test for it cell_class = [] return ColumnizeNode(nodelist, columns, row_class, cell_class) class ColumnizeNode(template.Node): def __init__(self, nodelist, columns = 1, row_class = '', cell_class = ''): self.nodelist = nodelist self.columns = int(columns) self.counter = 0 self.rowcounter = -1 self.cellcounter = -1 self.row_class_len = len(row_class) self.row_class = row_class self.cell_class_len = len(cell_class) self.cell_class = cell_class def render(self, context): output = '' self.counter += 1 if (self.counter > self.columns): self.counter = 1 self.cellcounter = -1 if (self.counter == 1): output = '<tr' if self.row_class: self.rowcounter += 1 output += ' class="%s">' % self.row_class [self.rowcounter % self.row_class_len] else: output += '>' output += '<td' if self.cell_class: self.cellcounter += 1 output += ' class="%s">' % self.cell_class [self.cellcounter % self.cell_class_len] else: output += '>' output += self.nodelist.render(context) + '</td>' if (self.counter == self.columns): output += '</tr>' return output register.tag('columnize', columnize) --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Django users" group. To post to this group, send email to django-users@googlegroups.com To unsubscribe from this group, send email to [EMAIL PROTECTED] For more options, visit this group at http://groups.google.com/group/django-users -~----------~----~----~----~------~----~------~--~---