From 2f70cdb338c76f76f946113474a25b19c8433574 Mon Sep 17 00:00:00 2001 From: Bernhard Scheirle Date: Thu, 18 Feb 2016 08:31:01 +0100 Subject: [PATCH] Enables the template engine also for feeds --- pelican/generators.py | 25 ++++++++++--------- .../themes/simple/templates/feed_item.html | 1 + pelican/writers.py | 12 +++++---- 3 files changed, 21 insertions(+), 17 deletions(-) create mode 100644 pelican/themes/simple/templates/feed_item.html diff --git a/pelican/generators.py b/pelican/generators.py index ff9a9d7c..03928f77 100644 --- a/pelican/generators.py +++ b/pelican/generators.py @@ -280,12 +280,13 @@ class ArticlesGenerator(CachingGenerator): def generate_feeds(self, writer): """Generate the feeds from the current context, and output files.""" + template = self.get_template('feed_item') if self.settings.get('FEED_ATOM'): - writer.write_feed(self.articles, self.context, + writer.write_feed(self.articles, self.context, template, self.settings['FEED_ATOM']) if self.settings.get('FEED_RSS'): - writer.write_feed(self.articles, self.context, + writer.write_feed(self.articles, self.context, template, self.settings['FEED_RSS'], feed_type='rss') if (self.settings.get('FEED_ALL_ATOM') or @@ -296,35 +297,35 @@ class ArticlesGenerator(CachingGenerator): all_articles.sort(key=attrgetter('date'), reverse=True) if self.settings.get('FEED_ALL_ATOM'): - writer.write_feed(all_articles, self.context, + writer.write_feed(all_articles, self.context, template, self.settings['FEED_ALL_ATOM']) if self.settings.get('FEED_ALL_RSS'): - writer.write_feed(all_articles, self.context, + writer.write_feed(all_articles, self.context, template, self.settings['FEED_ALL_RSS'], feed_type='rss') for cat, arts in self.categories: arts.sort(key=attrgetter('date'), reverse=True) if self.settings.get('CATEGORY_FEED_ATOM'): - writer.write_feed(arts, self.context, + writer.write_feed(arts, self.context, template, self.settings['CATEGORY_FEED_ATOM'] % cat.slug) if self.settings.get('CATEGORY_FEED_RSS'): - writer.write_feed(arts, self.context, + writer.write_feed(arts, self.context, template, self.settings['CATEGORY_FEED_RSS'] % cat.slug, feed_type='rss') for auth, arts in self.authors: arts.sort(key=attrgetter('date'), reverse=True) if self.settings.get('AUTHOR_FEED_ATOM'): - writer.write_feed(arts, self.context, + writer.write_feed(arts, self.context, template, self.settings['AUTHOR_FEED_ATOM'] % auth.slug) if self.settings.get('AUTHOR_FEED_RSS'): - writer.write_feed(arts, self.context, + writer.write_feed(arts, self.context, template, self.settings['AUTHOR_FEED_RSS'] % auth.slug, feed_type='rss') @@ -333,12 +334,12 @@ class ArticlesGenerator(CachingGenerator): for tag, arts in self.tags.items(): arts.sort(key=attrgetter('date'), reverse=True) if self.settings.get('TAG_FEED_ATOM'): - writer.write_feed(arts, self.context, + writer.write_feed(arts, self.context, template, self.settings['TAG_FEED_ATOM'] % tag.slug) if self.settings.get('TAG_FEED_RSS'): - writer.write_feed(arts, self.context, + writer.write_feed(arts, self.context, template, self.settings['TAG_FEED_RSS'] % tag.slug, feed_type='rss') @@ -352,11 +353,11 @@ class ArticlesGenerator(CachingGenerator): items.sort(key=attrgetter('date'), reverse=True) if self.settings.get('TRANSLATION_FEED_ATOM'): writer.write_feed( - items, self.context, + items, self.context, template, self.settings['TRANSLATION_FEED_ATOM'] % lang) if self.settings.get('TRANSLATION_FEED_RSS'): writer.write_feed( - items, self.context, + items, self.context, template, self.settings['TRANSLATION_FEED_RSS'] % lang, feed_type='rss') diff --git a/pelican/themes/simple/templates/feed_item.html b/pelican/themes/simple/templates/feed_item.html new file mode 100644 index 00000000..d377504a --- /dev/null +++ b/pelican/themes/simple/templates/feed_item.html @@ -0,0 +1 @@ +{{ feed_item.content }} \ No newline at end of file diff --git a/pelican/writers.py b/pelican/writers.py index 347fa64e..7373daab 100644 --- a/pelican/writers.py +++ b/pelican/writers.py @@ -41,8 +41,10 @@ class Writer(object): description=context.get('SITESUBTITLE', '')) return feed - def _add_item_to_the_feed(self, feed, item): - + def _add_item_to_the_feed(self, feed, item, template, context): + localcontext = context.copy() + localcontext.update({'feed_item' : item}) + output = template.render(localcontext) title = Markup(item.title).striptags() link = '%s/%s' % (self.site_url, item.url) feed.add_item( @@ -51,7 +53,7 @@ class Writer(object): unique_id='tag:%s,%s:%s' % (urlparse(link).netloc, item.date.date(), urlparse(link).path.lstrip('/')), - description=item.get_content(self.site_url), + description=output, categories=item.tags if hasattr(item, 'tags') else None, author_name=getattr(item, 'author', ''), pubdate=set_date_tzinfo( @@ -81,7 +83,7 @@ class Writer(object): self._written_files.add(filename) return open(filename, 'w', encoding=encoding) - def write_feed(self, elements, context, path=None, feed_type='atom', + def write_feed(self, elements, context, template, path=None, feed_type='atom', override_output=False): """Generate a feed with the list of articles provided @@ -111,7 +113,7 @@ class Writer(object): if self.settings['FEED_MAX_ITEMS']: max_items = min(self.settings['FEED_MAX_ITEMS'], max_items) for i in range(max_items): - self._add_item_to_the_feed(feed, elements[i]) + self._add_item_to_the_feed(feed, elements[i], template, context) if path: complete_path = os.path.join(self.output_path, path)