added support for generating subcategory feeds

This commit is contained in:
Alistair Magee
2014-01-24 12:59:57 +00:00
parent 48b990c0cd
commit 1facc9468b
2 changed files with 34 additions and 5 deletions

View File

@@ -7,6 +7,9 @@ regular category or another subcategory. Subcategories with the same name but
different parents are not the same. Their articles won't be grouped together
under that name.
Feeds can be generated for each subcategory just like categories and tags.
##Usage##
Subcategories are an extension to categories. Add subcategories to an article's
@@ -49,3 +52,13 @@ url would be:
category-slug/sub-category-slug/sub-sub-category-slug
with `savepath` being similar but joined using `os.path.join`
Similarily you can save a subcategory feeds by adding one of the following
to your pelicanconf file
SUBCATEGORY_FEED_ATOM = 'feeds/%s.atom.xml'
SUBCATEGORY_FEED_RSS = 'feeds/%s.rss.xml'
and this will create a feed with `fullurl` of the subcategory. Eg.
feeds/category/subcategory.atom.xml

View File

@@ -63,15 +63,31 @@ def generate_subcategories(generator, writer):
write = partial(writer.write_file,
relative_urls=generator.settings['RELATIVE_URLS'])
subcategory_template = generator.get_template('subcategory')
for sub_cat, articles in generator.subcategories.items():
for subcat, articles in generator.subcategories.items():
articles.sort(key=attrgetter('date'), reverse=True)
dates = [article for article in generator.dates if article in articles]
write(sub_cat.save_as, subcategory_template, generator.context,
subcategory=sub_cat, articles=articles, dates=dates,
write(subcat.save_as, subcategory_template, generator.context,
subcategory=subcat, articles=articles, dates=dates,
paginated={'articles': articles, 'dates': dates},
page_name=sub_cat.page_name, all_articles=generator.articles)
page_name=subcat.page_name, all_articles=generator.articles)
def generate_subcategory_feeds(generator, writer):
for subcat, articles in generator.subcategories.items():
articles.sort(key=attrgetter('date'), reverse=True)
if generator.settings.get('SUBCATEGORY_FEED_ATOM'):
writer.write_feed(articles, generator.context,
generator.settings['SUBCATEGORY_FEED_ATOM']
% subcat.fullurl)
if generator.settings.get('SUBCATEGORY_FEED_RSS'):
writer.write_feed(articles, generator.context,
generator.settings['SUBCATEGORY_FEED_RSS']
% subcat.fullurl, feed_type='rss')
def generate(generator, writer):
generate_subcategory_feeds(generator, writer)
generate_subcategories(generator, writer)
def register():
signals.article_generator_context.connect(get_subcategories)
signals.article_generator_finalized.connect(organize_subcategories)
signals.article_writer_finalized.connect(generate_subcategories)
signals.article_writer_finalized.connect(generate)