Reworked meta dict usage to make blog templates easier to understand

Displayed dates in the blog templates are now all taken from meta['date'],
which can be set by the 'date' metatag in the blog post but defaults to the
date obtained from the post's slug (i.e. what subfolder the post is in).
This commit is contained in:
str4d
2013-01-16 01:41:24 +00:00
parent 7e68f03888
commit 8e09d84d09
4 changed files with 21 additions and 17 deletions

View File

@ -11,7 +11,7 @@ from i2p2www import BLOG_DIR
SUPPORTED_METATAGS = {
'author': u'I2P devs',
'category': None,
'date': u'1970-01-01',
'date': None,
'excerpt': u'',
}
@ -20,11 +20,11 @@ SUPPORTED_METATAGS = {
# Blog helper methods
def get_blog_feed_items(num=0):
posts = get_blog_posts(num)
posts = get_blog_posts(num, True)
items = []
for post in posts:
meta = post[3]
parts = post[4]
meta = post[1]
parts = post[2]
a = {}
a['title'] = parts['title']
a['content'] = meta['excerpt'] if len(meta['excerpt']) > 0 else parts['fragment']
@ -33,7 +33,7 @@ def get_blog_feed_items(num=0):
items.append(a)
return items
def get_blog_posts(num=0):
def get_blog_posts(num=0, return_parts=False):
"""
Returns the latest #num valid posts sorted by date, or all slugs if num=0.
"""
@ -43,10 +43,13 @@ def get_blog_posts(num=0):
parts = render_blog_post(slug)
if parts:
meta = get_metadata_from_meta(parts['meta'])
date = get_date_from_slug(slug)
meta['date'] = meta['date'] if meta['date'] else get_date_from_slug(slug)
titlepart = slug.rsplit('/', 1)[1]
title = ' '.join(titlepart.split('_'))
posts.append((slug, date, title, meta, parts))
meta['title'] = ' '.join(titlepart.split('_'))
if return_parts:
posts.append((slug, meta, parts))
else:
posts.append((slug, meta))
return posts
def get_blog_slugs(num=0):

View File

@ -2,7 +2,7 @@ from flask import abort, render_template, request
from werkzeug.contrib.atom import AtomFeed
from i2p2www import BLOG_POSTS_PER_PAGE
from i2p2www.blog.helpers import get_blog_posts, get_blog_feed_items, get_metadata_from_meta, render_blog_post
from i2p2www.blog.helpers import get_blog_posts, get_blog_feed_items, get_date_from_slug, get_metadata_from_meta, render_blog_post
from i2p2www.helpers import Pagination, get_for_page
@ -23,6 +23,7 @@ def blog_post(slug):
if parts:
meta = get_metadata_from_meta(parts['meta'])
meta['date'] = meta['date'] if meta['date'] else get_date_from_slug(slug)
# now just pass to simple template file and we are done
return render_template('blog/post.html', parts=parts, title=parts['title'], body=parts['fragment'], slug=slug, meta=meta)
else:

View File

@ -6,19 +6,19 @@
{% block content %}
<p>Some descriptive text.</p>
<ul id="posts">
{% for post in posts %}
{% for (slug, post) in posts %}
<li>
<article>
<header>
<a href="{{ url_for('blog_post', slug=post[0]) }}">{{ post[2] }}</a>
<a href="{{ url_for('blog_post', slug=slug) }}">{{ post.title }}</a>
</header>
{%- if post[3].excerpt %}
<p>{{ post[3].excerpt }}</p>
{%- if post.excerpt %}
<p>{{ post.excerpt }}</p>
{%- endif %}
<footer>
<ul>
<li>{{ post[1] }}</li>
<li>{{ post[3].author }}</li>
<li>{{ post.date }}</li>
<li>{{ post.author }}</li>
</ul>
</footer>
</article>

View File

@ -1,6 +1,6 @@
<ul>
{% for post in blog_posts -%}
<li>{{ post[1] }} - <a href="{{ url_for('blog_post', slug=post[0]) }}">{{ post[2] }}</a></li>
{% for slug, post in blog_posts -%}
<li>{{ post.date }} - <a href="{{ url_for('blog_post', slug=slug) }}">{{ post.title }}</a></li>
{%- endfor %}
<li><a href="{{ url_for('blog_index', lang=g.lang) }}"><em>More blog posts&hellip;</em></a></li>
</ul>