forked from github/pelican
Make URL part joining aware of absolute URLs.
Previously, with RELATIVE_URLS disabled, when both SITEURL and
STATIC_URL were absolute, the final generate data URLs looked wrong like
this (two absolute URLs joined by `/`):
http://your.site/http://static.your.site/image.png
With this patch, the data URLs are correctly:
http://static.your.site/image.png
This also applies to all *_URL configuration options (for example,
ability to have pages and articles on different domains) and behaves
like one expects even with URLs starting with just `//`, thanks to
making use of urllib.parse.urljoin().
However, when RELATIVE_URLS are enabled, urllib.parse.urljoin() doesn't
handle the relative base correctly. In that case, simple os.path.join()
is used. That, however, breaks the above case, but as RELATIVE_URLS are
meant for local development (thus no data scattered across multiple
domains), I don't see any problem.
Just to clarify, this is a fully backwards-compatible change, it only
enables new use cases that were impossible before.
This commit is contained in:
parent
1f30306e23
commit
0b13aa9b46
2 changed files with 73 additions and 6 deletions
|
|
@ -397,6 +397,54 @@ class TestPage(LoggedTestCase):
|
|||
'</blockquote>'
|
||||
)
|
||||
|
||||
def test_intrasite_link_absolute(self):
|
||||
"""Test that absolute URLs are merged properly."""
|
||||
|
||||
args = self.page_kwargs.copy()
|
||||
args['settings'] = get_settings(
|
||||
STATIC_URL='http://static.cool.site/{path}',
|
||||
ARTICLE_URL='http://blog.cool.site/{slug}.html')
|
||||
args['source_path'] = 'content'
|
||||
args['context']['filenames'] = {
|
||||
'images/poster.jpg': Static('',
|
||||
settings=args['settings'],
|
||||
source_path='images/poster.jpg'),
|
||||
'article.rst': Article('',
|
||||
settings=args['settings'],
|
||||
metadata={'slug': 'article',
|
||||
'title': 'Article'})
|
||||
}
|
||||
|
||||
# Article link will go to blog
|
||||
args['content'] = (
|
||||
'<a href="{filename}article.rst">Article</a>'
|
||||
)
|
||||
content = Page(**args).get_content('http://cool.site')
|
||||
self.assertEqual(
|
||||
content,
|
||||
'<a href="http://blog.cool.site/article.html">Article</a>'
|
||||
)
|
||||
|
||||
# Page link will go to the main site
|
||||
args['content'] = (
|
||||
'<a href="{index}">Index</a>'
|
||||
)
|
||||
content = Page(**args).get_content('http://cool.site')
|
||||
self.assertEqual(
|
||||
content,
|
||||
'<a href="http://cool.site/index.html">Index</a>'
|
||||
)
|
||||
|
||||
# Image link will go to static
|
||||
args['content'] = (
|
||||
'<img src="{filename}/images/poster.jpg"/>'
|
||||
)
|
||||
content = Page(**args).get_content('http://cool.site')
|
||||
self.assertEqual(
|
||||
content,
|
||||
'<img src="http://static.cool.site/images/poster.jpg"/>'
|
||||
)
|
||||
|
||||
def test_intrasite_link_markdown_spaces(self):
|
||||
# Markdown introduces %20 instead of spaces, this tests that
|
||||
# we support markdown doing this.
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue