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.dispatch import receiver
|
||||||
from django.forms import models as model_forms
|
from django.forms import models as model_forms
|
||||||
from django.forms.widgets import MediaDefiningClass
|
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.test.client import RequestFactory
|
||||||
from django.utils import timezone
|
from django.utils import timezone
|
||||||
from django.utils.encoding import force_text, smart_bytes
|
from django.utils.encoding import force_text, smart_bytes
|
||||||
|
@ -660,10 +667,9 @@ class Page(models.Model):
|
||||||
context.push(original_context)
|
context.push(original_context)
|
||||||
for key, tplt in (self.extra_variables or {}).items():
|
for key, tplt in (self.extra_variables or {}).items():
|
||||||
try:
|
try:
|
||||||
template = Template(tplt)
|
result[key] = Template(tplt).render(context)
|
||||||
except TemplateSyntaxError:
|
except (TemplateSyntaxError, VariableDoesNotExist):
|
||||||
continue
|
continue
|
||||||
result[key] = template.render(context)
|
|
||||||
return result
|
return result
|
||||||
|
|
||||||
def get_extra_variables_keys(self):
|
def get_extra_variables_keys(self):
|
||||||
|
|
|
@ -1136,20 +1136,25 @@ def test_page_extra_variables(app):
|
||||||
title='Home',
|
title='Home',
|
||||||
slug='page',
|
slug='page',
|
||||||
template_name='standard',
|
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(
|
cell = JsonCell.objects.create(
|
||||||
page=page,
|
page=page,
|
||||||
url='http://example.net',
|
url='http://example.net',
|
||||||
order=0,
|
order=0,
|
||||||
placeholder='content',
|
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:
|
with mock.patch('combo.utils.requests.get') as requests_get:
|
||||||
requests_get.return_value = mock.Mock(content='{}', status_code=200)
|
requests_get.return_value = mock.Mock(content='{}', status_code=200)
|
||||||
resp = app.get('/page/')
|
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:
|
with mock.patch('combo.utils.requests.get') as requests_get:
|
||||||
requests_get.return_value = mock.Mock(content='{}', status_code=200)
|
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()},
|
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
|
# check sub_slug/extra_variables override
|
||||||
page.sub_slug = '(?P<fooo>[a-z]+)'
|
page.sub_slug = '(?P<fooo>[a-z]+)'
|
||||||
|
|
Loading…
Reference in New Issue