From a8b594f9d992ad896fbe320c0ae8a41be39f6109 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vladim=C3=ADr=20Vondru=C5=A1?= Date: Sun, 29 Oct 2017 19:59:20 +0100 Subject: [PATCH] Make feed generator aware of absolute URLs. So for example in case both SITEURL and ARTICLE_URL is absolute, the generated URLs are not improperly http://your.site/http://blog.your.site/the-article/ but rather http://blog.your.site/the-article/ --- pelican/writers.py | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/pelican/writers.py b/pelican/writers.py index ba77e7b5..28e1d75b 100644 --- a/pelican/writers.py +++ b/pelican/writers.py @@ -9,6 +9,7 @@ from feedgenerator import Atom1Feed, Rss201rev2Feed, get_tag_uri from jinja2 import Markup import six +from six.moves.urllib.parse import urljoin from pelican import signals from pelican.paginator import Paginator @@ -30,6 +31,13 @@ class Writer(object): self._written_files = set() self._overridden_files = set() + # See Content._link_replacer for details + if self.settings['RELATIVE_URLS']: + self.urljoiner = os.path.join + else: + self.urljoiner = lambda base, url: urljoin( + base if base.endswith('/') else base + '/', url) + def _create_new_feed(self, feed_type, feed_title, context): feed_class = Rss201rev2Feed if feed_type == 'rss' else Atom1Feed if feed_title: @@ -44,9 +52,8 @@ class Writer(object): return feed def _add_item_to_the_feed(self, feed, item): - title = Markup(item.title).striptags() - link = '%s/%s' % (self.site_url, item.url) + link = self.urljoiner(self.site_url, item.url) is_rss = isinstance(feed, Rss201rev2Feed) if not is_rss or self.settings.get('RSS_FEED_SUMMARY_ONLY'): description = item.summary @@ -114,7 +121,7 @@ class Writer(object): 'SITEURL', path_to_url(get_relative_path(path))) self.feed_domain = context.get('FEED_DOMAIN') - self.feed_url = '{}/{}'.format(self.feed_domain, url if url else path) + self.feed_url = self.urljoiner(self.feed_domain, url if url else path) feed = self._create_new_feed(feed_type, feed_title, context)