0001-data-fix-extra_variables-VariableDoesNotExist-65746.patch
combo/data/models.py | ||
---|---|---|
45 | 45 |
from django.dispatch import receiver |
46 | 46 |
from django.forms import models as model_forms |
47 | 47 |
from django.forms.widgets import MediaDefiningClass |
48 |
from django.template import RequestContext, Template, TemplateDoesNotExist, TemplateSyntaxError, engines |
|
48 |
from django.template import ( |
|
49 |
RequestContext, |
|
50 |
Template, |
|
51 |
TemplateDoesNotExist, |
|
52 |
TemplateSyntaxError, |
|
53 |
VariableDoesNotExist, |
|
54 |
engines, |
|
55 |
) |
|
49 | 56 |
from django.test.client import RequestFactory |
50 | 57 |
from django.utils import timezone |
51 | 58 |
from django.utils.encoding import force_text, smart_bytes |
... | ... | |
660 | 667 |
context.push(original_context) |
661 | 668 |
for key, tplt in (self.extra_variables or {}).items(): |
662 | 669 |
try: |
663 |
template = Template(tplt)
|
|
664 |
except TemplateSyntaxError:
|
|
670 |
result[key] = Template(tplt).render(context)
|
|
671 |
except (TemplateSyntaxError, VariableDoesNotExist):
|
|
665 | 672 |
continue |
666 |
result[key] = template.render(context) |
|
667 | 673 |
return result |
668 | 674 | |
669 | 675 |
def get_extra_variables_keys(self): |
tests/test_public.py | ||
---|---|---|
1136 | 1136 |
title='Home', |
1137 | 1137 |
slug='page', |
1138 | 1138 |
template_name='standard', |
1139 |
extra_variables={'foo': 'bar', 'bar_id': '{{ 40|add:2 }}'}, |
|
1139 |
extra_variables={ |
|
1140 |
'foo': 'bar', |
|
1141 |
'bar_id': '{{ 40|add:2 }}', |
|
1142 |
'syntax_error': '{% for %}', |
|
1143 |
'variable_error': '{{ "foo"|add:user.email }}', |
|
1144 |
}, |
|
1140 | 1145 |
) |
1141 | 1146 |
cell = JsonCell.objects.create( |
1142 | 1147 |
page=page, |
1143 | 1148 |
url='http://example.net', |
1144 | 1149 |
order=0, |
1145 | 1150 |
placeholder='content', |
1146 |
template_string='XX{{ foo }}YY{{ bar_id }}ZZ', |
|
1151 |
template_string='XX{{ foo }}YY{{ bar_id }}ZZ{{ baz_user }}AA{{ syntax_error }}BB{{ variable_error }}CC',
|
|
1147 | 1152 |
) |
1148 | 1153 | |
1149 | 1154 |
with mock.patch('combo.utils.requests.get') as requests_get: |
1150 | 1155 |
requests_get.return_value = mock.Mock(content='{}', status_code=200) |
1151 | 1156 |
resp = app.get('/page/') |
1152 |
assert '<div>XXbarYY42ZZ</div>' in resp |
|
1157 |
assert '<div>XXbarYY42ZZAABBCC</div>' in resp
|
|
1153 | 1158 | |
1154 | 1159 |
with mock.patch('combo.utils.requests.get') as requests_get: |
1155 | 1160 |
requests_get.return_value = mock.Mock(content='{}', status_code=200) |
... | ... | |
1159 | 1164 |
kwargs={'page_pk': page.pk, 'cell_reference': cell.get_reference()}, |
1160 | 1165 |
) |
1161 | 1166 |
) |
1162 |
assert resp.text.strip() == 'XXbarYY42ZZ' |
|
1167 |
assert resp.text.strip() == 'XXbarYY42ZZAABBCC'
|
|
1163 | 1168 | |
1164 | 1169 |
# check sub_slug/extra_variables override |
1165 | 1170 |
page.sub_slug = '(?P<fooo>[a-z]+)' |
1166 |
- |