From f854f8f55137392145754e85d278d7193b91b9c2 Mon Sep 17 00:00:00 2001 From: Jannis Leidel Date: Fri, 25 Jan 2013 12:40:47 +0100 Subject: [PATCH 1/3] Render the esi tags with a template to be able to customize it depending on the context (e.g. pass in GET vars). --- MANIFEST.in | 1 + armstrong/esi/templates/esi/esi_tag.html | 1 + armstrong/esi/templatetags/esi.py | 13 ++++++++----- 3 files changed, 10 insertions(+), 5 deletions(-) create mode 100644 armstrong/esi/templates/esi/esi_tag.html diff --git a/MANIFEST.in b/MANIFEST.in index 826968b..0b77997 100644 --- a/MANIFEST.in +++ b/MANIFEST.in @@ -1,3 +1,4 @@ include README.rst include package.json +recursive-include armstrong/esi/templates *.html prune build/* diff --git a/armstrong/esi/templates/esi/esi_tag.html b/armstrong/esi/templates/esi/esi_tag.html new file mode 100644 index 0000000..5410516 --- /dev/null +++ b/armstrong/esi/templates/esi/esi_tag.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/armstrong/esi/templatetags/esi.py b/armstrong/esi/templatetags/esi.py index f343423..9cf1e71 100644 --- a/armstrong/esi/templatetags/esi.py +++ b/armstrong/esi/templatetags/esi.py @@ -1,10 +1,10 @@ from django import template from django.template import defaulttags from django.template.defaulttags import URLNode +from django.template.loader import render_to_string register = template.Library() -esi_tmpl = '' class EsiTemplateTagError(Exception): pass @@ -27,12 +27,15 @@ def render(self, context): url = self.raw_url or super(EsiNode, self).render(context) + render_context = context.copy() + render_context['esi_url'] = url + result = render_to_string('esi/esi_tag.html', render_context) + if self.asvar: - url = context[self.asvar] - context[self.asvar] = esi_tmpl % url + context[self.asvar] = result return '' - else: - return esi_tmpl % url + + return result @register.tag def esi(parser, token): From 87625df809a82c07663113bd274c2430075476d7 Mon Sep 17 00:00:00 2001 From: Jannis Leidel Date: Fri, 25 Jan 2013 12:53:23 +0100 Subject: [PATCH 2/3] Fixed copying the context. --- armstrong/esi/templatetags/esi.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/armstrong/esi/templatetags/esi.py b/armstrong/esi/templatetags/esi.py index 9cf1e71..fac5205 100644 --- a/armstrong/esi/templatetags/esi.py +++ b/armstrong/esi/templatetags/esi.py @@ -1,3 +1,4 @@ +import copy from django import template from django.template import defaulttags from django.template.defaulttags import URLNode @@ -27,7 +28,7 @@ def render(self, context): url = self.raw_url or super(EsiNode, self).render(context) - render_context = context.copy() + render_context = copy.copy(context) render_context['esi_url'] = url result = render_to_string('esi/esi_tag.html', render_context) From ccd3b411c9689776eb8647ef6e1989dcd7bc4969 Mon Sep 17 00:00:00 2001 From: Jannis Leidel Date: Wed, 30 Jan 2013 18:14:50 +0100 Subject: [PATCH 3/3] Handle the case of using 'as var' better. --- armstrong/esi/templatetags/esi.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/armstrong/esi/templatetags/esi.py b/armstrong/esi/templatetags/esi.py index fac5205..841d6a9 100644 --- a/armstrong/esi/templatetags/esi.py +++ b/armstrong/esi/templatetags/esi.py @@ -26,7 +26,12 @@ def render(self, context): except KeyError: raise EsiTemplateTagError('The esi templatetag requires the esi context processor, but it isn\'t present.') - url = self.raw_url or super(EsiNode, self).render(context) + if self.raw_url: + url = self.raw_url + else: + url = super(EsiNode, self).render(context) + if self.asvar: + url = context[self.asvar] render_context = copy.copy(context) render_context['esi_url'] = url