data: fix extra_variables & VariableDoesNotExist (#65746)
This commit is contained in:
parent
6466b0f5d8
commit
c6fd8e1ee0
|
@ -45,7 +45,14 @@ from django.db.models.signals import post_delete, post_save, pre_save
|
|||
from django.dispatch import receiver
|
||||
from django.forms import models as model_forms
|
||||
from django.forms.widgets import MediaDefiningClass
|
||||
from django.template import RequestContext, Template, TemplateDoesNotExist, TemplateSyntaxError, engines
|
||||
from django.template import (
|
||||
RequestContext,
|
||||
Template,
|
||||
TemplateDoesNotExist,
|
||||
TemplateSyntaxError,
|
||||
VariableDoesNotExist,
|
||||
engines,
|
||||
)
|
||||
from django.test.client import RequestFactory
|
||||
from django.utils import timezone
|
||||
from django.utils.encoding import force_text, smart_bytes
|
||||
|
@ -660,10 +667,9 @@ class Page(models.Model):
|
|||
context.push(original_context)
|
||||
for key, tplt in (self.extra_variables or {}).items():
|
||||
try:
|
||||
template = Template(tplt)
|
||||
except TemplateSyntaxError:
|
||||
result[key] = Template(tplt).render(context)
|
||||
except (TemplateSyntaxError, VariableDoesNotExist):
|
||||
continue
|
||||
result[key] = template.render(context)
|
||||
return result
|
||||
|
||||
def get_extra_variables_keys(self):
|
||||
|
|
|
@ -1136,20 +1136,25 @@ def test_page_extra_variables(app):
|
|||
title='Home',
|
||||
slug='page',
|
||||
template_name='standard',
|
||||
extra_variables={'foo': 'bar', 'bar_id': '{{ 40|add:2 }}'},
|
||||
extra_variables={
|
||||
'foo': 'bar',
|
||||
'bar_id': '{{ 40|add:2 }}',
|
||||
'syntax_error': '{% for %}',
|
||||
'variable_error': '{{ "foo"|add:user.email }}',
|
||||
},
|
||||
)
|
||||
cell = JsonCell.objects.create(
|
||||
page=page,
|
||||
url='http://example.net',
|
||||
order=0,
|
||||
placeholder='content',
|
||||
template_string='XX{{ foo }}YY{{ bar_id }}ZZ',
|
||||
template_string='XX{{ foo }}YY{{ bar_id }}ZZ{{ baz_user }}AA{{ syntax_error }}BB{{ variable_error }}CC',
|
||||
)
|
||||
|
||||
with mock.patch('combo.utils.requests.get') as requests_get:
|
||||
requests_get.return_value = mock.Mock(content='{}', status_code=200)
|
||||
resp = app.get('/page/')
|
||||
assert '<div>XXbarYY42ZZ</div>' in resp
|
||||
assert '<div>XXbarYY42ZZAABBCC</div>' in resp
|
||||
|
||||
with mock.patch('combo.utils.requests.get') as requests_get:
|
||||
requests_get.return_value = mock.Mock(content='{}', status_code=200)
|
||||
|
@ -1159,7 +1164,7 @@ def test_page_extra_variables(app):
|
|||
kwargs={'page_pk': page.pk, 'cell_reference': cell.get_reference()},
|
||||
)
|
||||
)
|
||||
assert resp.text.strip() == 'XXbarYY42ZZ'
|
||||
assert resp.text.strip() == 'XXbarYY42ZZAABBCC'
|
||||
|
||||
# check sub_slug/extra_variables override
|
||||
page.sub_slug = '(?P<fooo>[a-z]+)'
|
||||
|
|
Loading…
Reference in New Issue