Enables the template engine also for feeds

This commit is contained in:
Bernhard Scheirle 2016-02-18 08:31:01 +01:00
commit 2f70cdb338
3 changed files with 21 additions and 17 deletions

View file

@ -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')

View file

@ -0,0 +1 @@
{{ feed_item.content }}

View file

@ -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)