Projet

Général

Profil

0001-public-do-not-redirect-if-template-rendering-is-empt.patch

Thomas Noël, 15 janvier 2019 11:59

Télécharger (2,12 ko)

Voir les différences:

Subject: [PATCH] public: do not redirect if template rendering is empty
 (#29763)

Also, on template error, raise a 404 with a debug message.
 combo/public/views.py |  9 +++++++--
 tests/test_public.py  | 13 +++++++++++++
 2 files changed, 20 insertions(+), 2 deletions(-)
combo/public/views.py
440 440
        raise PermissionDenied()
441 441

  
442 442
    if page.redirect_url:
443
        return HttpResponseRedirect(
444
                    page.get_redirect_url(context=request.extra_context_data))
443
        try:
444
            redirect_url = page.get_redirect_url(context=request.extra_context_data)
445
        except utils.TemplateError:
446
            raise Http404("combo: can't calculate the redirect URL (template error).")
447
        else:
448
            if redirect_url:
449
                return HttpResponseRedirect(redirect_url)
445 450

  
446 451
    cells = CellBase.get_cells(page=page)
447 452
    extend_with_parent_cells(cells, hierarchy=pages)
tests/test_public.py
197 197
        resp = app.get('/elsewhere/', status=302)
198 198
        assert resp.location == 'http://example.net'
199 199

  
200
        page.redirect_url = '{{test_url}}/ok'
201
        page.save()
202
        resp = app.get('/elsewhere/', status=302)
203
        assert resp.location == 'http://example.net/ok'
204

  
205
        page.redirect_url = '{{unknown_variable}}'
206
        page.save()
207
        resp = app.get('/elsewhere/', status=200)
208

  
209
        page.redirect_url = '{% if error %}'
210
        page.save()
211
        resp = app.get('/elsewhere/', status=404)
212

  
200 213
def test_page_private_unlogged(app):
201 214
    Page.objects.all().delete()
202 215
    page = Page(title='Home', slug='index', template_name='standard', public=False)
203
-