Added support adding generic metadata to contexts

Primitive open graph protocol support
This commit is contained in:
Sebastian 2017-04-25 21:33:46 +02:00
parent 0d12462345
commit 3aa8ecaf16
4 changed files with 84 additions and 4 deletions

20
mixins/metadatamixin.py Normal file
View File

@ -0,0 +1,20 @@
#!/usr/bin/env python2
import copy
from verdandi.mixins.templatemixin import TemplateMixin
class MetadataMixin(TemplateMixin):
metadata = {}
def get_metadata(self):
return copy.copy(self.metadata)
def get_context(self):
context = super(MetadataMixin, self).get_context()
metadata = self.get_metadata()
for key, value in metadata.items():
context['meta_%s' % key] = value
return context

View File

@ -9,9 +9,10 @@ from verdandi.mixins.templatemixin import TemplateMixin
from verdandi.mixins.menuitemmixin import MenuItemMixin from verdandi.mixins.menuitemmixin import MenuItemMixin
from verdandi.mixins.fileassetsmixin import FileAssetsMixin from verdandi.mixins.fileassetsmixin import FileAssetsMixin
from verdandi.mixins.newsitemmixin import NewsItemMixin from verdandi.mixins.newsitemmixin import NewsItemMixin
from verdandi.mixins.metadatamixin import MetadataMixin
from verdandi.constants import CONTENT_DIRECTORY, MARKDOWN_EXTENSIONS from verdandi.constants import CONTENT_DIRECTORY, MARKDOWN_EXTENSIONS
class Gallery(MenuItemMixin, NewsItemMixin, TemplateMixin, FileAssetsMixin): class Gallery(MenuItemMixin, NewsItemMixin, MetadataMixin, TemplateMixin, FileAssetsMixin):
gallery_description_file = 'description.md' gallery_description_file = 'description.md'
gallery_directory = 'gallery' gallery_directory = 'gallery'
gallery_images_url = 'img/gallery' gallery_images_url = 'img/gallery'
@ -26,6 +27,8 @@ class Gallery(MenuItemMixin, NewsItemMixin, TemplateMixin, FileAssetsMixin):
template = "gallery.html" template = "gallery.html"
metadata_description_len = 10
content_directory = CONTENT_DIRECTORY content_directory = CONTENT_DIRECTORY
markdown_extensions = MARKDOWN_EXTENSIONS markdown_extensions = MARKDOWN_EXTENSIONS
@ -70,6 +73,26 @@ class Gallery(MenuItemMixin, NewsItemMixin, TemplateMixin, FileAssetsMixin):
return item return item
def get_metadata(self):
markdown_converter = markdown.Markdown(extensions = self.markdown_extensions)
metadata = super(Gallery, self).get_metadata()
lines = self.description['content'].split('\n')
elipsized_description = '\n'.join(lines[0:self.news_item_len])
elipsized_description = markdown_converter.convert(elipsized_description)
meta = {
'url': "/%s" % self.url,
'title': self.description['title'],
'description' : elipsized_description
}
if 'image' in metadata:
meta['image'] = "/%s" % metadata['image']
return meta
def get_context(self): def get_context(self):
context = super(Gallery,self).get_context() context = super(Gallery,self).get_context()

View File

@ -8,10 +8,11 @@ from dateutil import parser
from verdandi.mixins.templatemixin import TemplateMixin from verdandi.mixins.templatemixin import TemplateMixin
from verdandi.mixins.menuitemmixin import MenuItemMixin from verdandi.mixins.menuitemmixin import MenuItemMixin
from verdandi.mixins.fileassetsmixin import FileAssetsMixin from verdandi.mixins.fileassetsmixin import FileAssetsMixin
from verdandi.mixins.metadatamixin import MetadataMixin
from verdandi.constants import CONTENT_DIRECTORY, MARKDOWN_EXTENSIONS from verdandi.constants import CONTENT_DIRECTORY, MARKDOWN_EXTENSIONS
class NewsFeed(MenuItemMixin, TemplateMixin, FileAssetsMixin): class NewsFeed(MenuItemMixin, MetadataMixin, TemplateMixin, FileAssetsMixin):
title = "News feed title" title = "News feed title"
template = "newsfeed.html" template = "newsfeed.html"
@ -25,7 +26,6 @@ class NewsFeed(MenuItemMixin, TemplateMixin, FileAssetsMixin):
items = [] items = []
def process_message(self, message): def process_message(self, message):
other_messages = super(NewsFeed, self).process_message(message) other_messages = super(NewsFeed, self).process_message(message)
@ -38,6 +38,23 @@ class NewsFeed(MenuItemMixin, TemplateMixin, FileAssetsMixin):
return other_messages return other_messages
def get_metadata(self):
metadata = super(NewsFeed, self).get_metadata()
meta = {
'url': "/%s" % self.url,
'title': self.title
}
if 'description' in metadata:
meta['description'] = metadata['description']
if 'image' in metadata:
meta['image'] = "/%s" % metadata['image']
return meta
def get_context(self): def get_context(self):
context = super(NewsFeed,self).get_context() context = super(NewsFeed,self).get_context()
context['title'] = self.title context['title'] = self.title

View File

@ -8,9 +8,10 @@ from verdandi.mixins.templatemixin import TemplateMixin
from verdandi.mixins.menuitemmixin import MenuItemMixin from verdandi.mixins.menuitemmixin import MenuItemMixin
from verdandi.mixins.fileassetsmixin import FileAssetsMixin from verdandi.mixins.fileassetsmixin import FileAssetsMixin
from verdandi.mixins.newsitemmixin import NewsItemMixin from verdandi.mixins.newsitemmixin import NewsItemMixin
from verdandi.mixins.metadatamixin import MetadataMixin
from verdandi.constants import CONTENT_DIRECTORY, MARKDOWN_EXTENSIONS from verdandi.constants import CONTENT_DIRECTORY, MARKDOWN_EXTENSIONS
class Page(MenuItemMixin, NewsItemMixin, TemplateMixin, FileAssetsMixin): class Page(MenuItemMixin, NewsItemMixin, MetadataMixin, TemplateMixin, FileAssetsMixin):
content_file = "content.md" content_file = "content.md"
content_is_markdown = True content_is_markdown = True
@ -19,6 +20,7 @@ class Page(MenuItemMixin, NewsItemMixin, TemplateMixin, FileAssetsMixin):
markdown_extensions = MARKDOWN_EXTENSIONS markdown_extensions = MARKDOWN_EXTENSIONS
news_item_len = 10 news_item_len = 10
metadata_description_len = 10
def process_message(self, message): def process_message(self, message):
@ -45,6 +47,24 @@ class Page(MenuItemMixin, NewsItemMixin, TemplateMixin, FileAssetsMixin):
return item return item
def get_metadata(self):
markdown_converter = markdown.Markdown(extensions = self.markdown_extensions)
metadata = super(Page, self).get_metadata()
lines = self.content['content'].split('\n')
elipsized_content = '\n'.join(lines[0:self.news_item_len])
elipsized_content = markdown_converter.convert(elipsized_content)
meta = {
'url': "/%s" % self.url,
'title': self.content['title'],
'description' : elipsized_content
}
if 'image' in metadata:
meta['image'] = "/%s" % metadata['image']
return meta
def get_context(self): def get_context(self):
context = super(Page,self).get_context() context = super(Page,self).get_context()