Skip to content

Instantly share code, notes, and snippets.

@wnielson
Created June 30, 2012 01:31
Show Gist options
  • Save wnielson/3021699 to your computer and use it in GitHub Desktop.
Save wnielson/3021699 to your computer and use it in GitHub Desktop.
get_latest_objects_by_category templatetag
diff --git a/categories/templatetags/category_tags.py b/categories/templatetags/category_tags.py
index 226a3ad..cddc8b9 100644
--- a/categories/templatetags/category_tags.py
+++ b/categories/templatetags/category_tags.py
@@ -1,4 +1,6 @@
from django import template
+from django.core.cache import cache
+from django.db import models
from django.template import Library, Node, TemplateSyntaxError, \
Variable, resolve_variable, VariableDoesNotExist, Context
from categories.base import CategoryBase
@@ -221,7 +223,7 @@ def resolve(var, context):
def get_latest_objects_by_category(category, app_label, model_name, set_name,
date_field='pub_date', num=15):
- m = get_model(app_label, model_name)
+ m = models.get_model(app_label, model_name)
if not isinstance(category, CategoryBase):
category = Category.objects.get(slug=str(category))
children = category.children.all()
@@ -248,7 +250,7 @@ class LatestObjectsNode(Node):
date_field, num):
"""Get the cache key"""
key = 'latest_objects.%s' % '.'.join([category, app_label, model_name,
- set_name, date_field, num])
+ set_name, date_field, str(num)])
def render(self, context):
"""Render this sucker"""
@@ -263,14 +265,19 @@ class LatestObjectsNode(Node):
date_field, num)
result = cache.get(cache_key)
if not result:
- result = get_latest_objects_by_category(category, app_label, model_name,
+ try:
+ result = get_latest_objects_by_category(category, app_label, model_name,
set_name, date_field, num)
- cache.set(key, result, 300)
+ cache.set(cache_key, result, 300)
+ except Exception, e:
+ result = None
+
context[self.var_name] = result
return ''
+@register.tag("get_latest_objects_by_category")
def do_get_latest_objects_by_category(parser, token):
"""
Get the latest objects by category
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment