misc: use full URLs for href/src attributes in 404 skeleton pages (#45895)

This commit is contained in:
Frédéric Péters 2020-08-14 12:00:54 +02:00
parent 1aa02b0fb4
commit e38254d47d
3 changed files with 13 additions and 5 deletions

View File

@ -1056,7 +1056,7 @@ class TextCell(CellBase):
def get_cell_extra_context(self, context):
extra_context = super(TextCell, self).get_cell_extra_context(context)
text = self.text or ''
render_skeleton = context.get('render_skeleton')
force_absolute_url = context.get('force_absolute_url') or context.get('render_skeleton')
def sub_variadic_url(match):
attribute = match.group(1)
@ -1069,7 +1069,7 @@ class TextCell(CellBase):
return '%s="%s"' % (attribute, url)
text = re.sub(r'(href|src)="(.*?)"', sub_variadic_url, text)
if render_skeleton:
if force_absolute_url:
request = context.get('request')
def sub_src(match):
url = request.build_absolute_uri(match.group(1))
@ -1214,7 +1214,7 @@ class LinkCell(CellBase):
return url
def get_cell_extra_context(self, context):
render_skeleton = context.get('render_skeleton')
force_absolute_url = context.get('force_absolute_url') or context.get('render_skeleton')
request = context.get('request')
extra_context = super(LinkCell, self).get_cell_extra_context(context)
if self.link_page:
@ -1222,7 +1222,7 @@ class LinkCell(CellBase):
else:
extra_context['title'] = self.title or self.url
url = self.get_url(context)
if render_skeleton and not urlparse.urlparse(url).netloc:
if force_absolute_url and not urlparse.urlparse(url).netloc:
# create full URL when used in a skeleton
url = request.build_absolute_uri(url)
extra_context['url'] = url

View File

@ -240,7 +240,10 @@ def skeleton(request):
source = request.GET['source']
if source == '404':
request.extra_context_data = {'site_base': request.build_absolute_uri('/')[:-1]}
request.extra_context_data = {
'site_base': request.build_absolute_uri('/')[:-1],
'force_absolute_url': True,
}
response = error404(request, exception=Http404())
response.status_code = 200
return response
@ -324,6 +327,7 @@ def skeleton(request):
'pages': pages,
'request': request,
'render_skeleton': True,
'force_absolute_url': True,
'check_badges': should_check_badges(),
'site_base': request.build_absolute_uri('/')[:-1],
}

View File

@ -366,6 +366,10 @@ def test_page_skeleton(app):
resp = app.get('/__skeleton__/?source=404')
assert "This page doesn't exist" in resp.text
assert resp.status_code == 200
assert 'href="http://testserver/test/foobar"' in resp.text
assert 'href="http://www.example.com/test"' in resp.text
assert 'href="#top"' in resp.text
assert 'href="http://testserver/plop/"' in resp.text
# do not consider empty redirection
Page.objects.all().delete()