Skip to content

Commit

Permalink
Fail silently on resolving variables, falling back to settings.TEMPLA…
Browse files Browse the repository at this point in the history
…TE_STRING_IF_INVALID
  • Loading branch information
Jaap Roes committed Oct 29, 2012
1 parent 498fc42 commit eb8723e
Show file tree
Hide file tree
Showing 2 changed files with 14 additions and 3 deletions.
13 changes: 10 additions & 3 deletions fancy_tag/__init__.py
@@ -1,7 +1,8 @@
from inspect import getargspec from inspect import getargspec
import re import re


from django.template import Node, Variable, generic_tag_compiler from django.conf import settings
from django.template import Node, Variable, VariableDoesNotExist, generic_tag_compiler
from django.template import TemplateSyntaxError, ALLOWED_VARIABLE_CHARS from django.template import TemplateSyntaxError, ALLOWED_VARIABLE_CHARS
from django.utils.functional import curry from django.utils.functional import curry


Expand Down Expand Up @@ -79,10 +80,16 @@ def __init__(self, vars_to_resolve, kw_vars_to_resolve, output_var, takes_contex
self.output_var = output_var self.output_var = output_var
self.takes_context = takes_context self.takes_context = takes_context


def safe_resolve(self, var, context):
try:
return var.resolve(context)
except VariableDoesNotExist:
return settings.TEMPLATE_STRING_IF_INVALID

def render(self, context): def render(self, context):
args = [var.resolve(context) for var in self.vars_to_resolve] args = [self.safe_resolve(var, context) for var in self.vars_to_resolve]
kwargs = dict( kwargs = dict(
[(kw, var.resolve(context)) for kw, var in self.kw_vars_to_resolve.items()]) [(kw, self.safe_resolve(var, context)) for kw, var in self.kw_vars_to_resolve.items()])


if self.takes_context: if self.takes_context:
args = [context] + args args = [context] + args
Expand Down
4 changes: 4 additions & 0 deletions tests/test_app/tests.py
Expand Up @@ -19,6 +19,10 @@ def testTagWithKwargAndArg(self):
template = Template('{% load example_tags %}{% say_soup "Tomato" size="large" %}') template = Template('{% load example_tags %}{% say_soup "Tomato" size="large" %}')
self.assertEqual(template.render(Context()), 'Tomato Soup (large)') self.assertEqual(template.render(Context()), 'Tomato Soup (large)')


def testContextLookupFailsSilently(self):
template = Template('{% load example_tags %}{% say_soup soup %}')
self.assertEqual(template.render(Context()), ' Soup')

def testArgAfterKwargFails(self): def testArgAfterKwargFails(self):
self.assertRaises( self.assertRaises(
TemplateSyntaxError, TemplateSyntaxError,
Expand Down

0 comments on commit eb8723e

Please sign in to comment.