data: fix extra_variables & VariableDoesNotExist (#65746)
gitea-wip/combo/pipeline/head There was a failure building this commit Details
gitea/combo/pipeline/head Something is wrong with the build of this commit Details

This commit is contained in:
Lauréline Guérin 2022-05-30 09:34:28 +02:00
parent 6466b0f5d8
commit c6fd8e1ee0
No known key found for this signature in database
GPG Key ID: 1FAB9B9B4F93D473
2 changed files with 19 additions and 8 deletions

View File

@ -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):

View File

@ -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]+)'