From e82eb541018f5e4a2a20fb4af907e7133fcbf76a Mon Sep 17 00:00:00 2001 From: benemery Date: Sun, 13 Apr 2014 00:49:22 +0100 Subject: [PATCH] Prevent DB lookups with local cache of filters --- wagtail/wagtailimages/templatetags/image_tags.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/wagtail/wagtailimages/templatetags/image_tags.py b/wagtail/wagtailimages/templatetags/image_tags.py index 4f0f8f674..e59d9cd14 100644 --- a/wagtail/wagtailimages/templatetags/image_tags.py +++ b/wagtail/wagtailimages/templatetags/image_tags.py @@ -4,6 +4,8 @@ from wagtail.wagtailimages.models import Filter register = template.Library() +# Local cache of filters, avoid hitting the DB +filters = {} @register.tag(name="image") def image(parser, token): @@ -30,9 +32,12 @@ def image(parser, token): class ImageNode(template.Node): def __init__(self, image_var_name, filter_spec, output_var_name=None): self.image_var = template.Variable(image_var_name) - self.filter, created = Filter.objects.get_or_create(spec=filter_spec) self.output_var_name = output_var_name + if filter_spec not in filters: + filters[filter_spec], _ = Filter.objects.get_or_create(spec=filter_spec) + self.filter = filters[filter_spec] + def render(self, context): try: image = self.image_var.resolve(context)