public: do not redirect if template rendering is empty (#29763)

Also, on template error, raise a 404 with a debug message.
This commit is contained in:
Thomas NOËL 2019-01-15 11:59:09 +01:00
parent 836996f551
commit fb718c6c47
2 changed files with 19 additions and 2 deletions

View File

@ -446,8 +446,12 @@ def publish_page(request, page, status=200, template_name=None):
raise PermissionDenied()
if page.redirect_url:
return HttpResponseRedirect(
page.get_redirect_url(context=request.extra_context_data))
try:
redirect_url = page.get_redirect_url(context=request.extra_context_data)
except utils.TemplateError:
raise Http404("combo: can't compute redirect URL (template error).")
if redirect_url:
return HttpResponseRedirect(redirect_url)
cells = CellBase.get_cells(page=page)
extend_with_parent_cells(cells, hierarchy=pages)

View File

@ -197,6 +197,19 @@ def test_page_templated_redirect(app):
resp = app.get('/elsewhere/', status=302)
assert resp.location == 'http://example.net'
page.redirect_url = '{{test_url}}/ok'
page.save()
resp = app.get('/elsewhere/', status=302)
assert resp.location == 'http://example.net/ok'
page.redirect_url = '{{unknown_variable}}'
page.save()
resp = app.get('/elsewhere/', status=200)
page.redirect_url = '{% if error %}'
page.save()
resp = app.get('/elsewhere/', status=404)
def test_page_private_unlogged(app):
Page.objects.all().delete()
page = Page(title='Home', slug='index', template_name='standard', public=False)