aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xsetup.py3
-rwxr-xr-xweblog/apps.py1
-rw-r--r--weblog/feeds.py81
-rwxr-xr-xweblog/urls.py13
4 files changed, 95 insertions, 3 deletions
diff --git a/setup.py b/setup.py
index c0577f9..279b4cc 100755
--- a/setup.py
+++ b/setup.py
@@ -1,4 +1,3 @@
-#!/usr/bin/env python
import os
from setuptools import find_packages, setup
@@ -10,7 +9,7 @@ os.chdir(os.path.normpath(os.path.join(os.path.abspath(__file__), os.pardir)))
setup(
name='django-weblog',
- version='0.3-postlang.6',
+ version='0.4-testing.0',
packages=find_packages(),
include_package_data=True,
license='BSD License',
diff --git a/weblog/apps.py b/weblog/apps.py
index 6f2db71..cc800c1 100755
--- a/weblog/apps.py
+++ b/weblog/apps.py
@@ -12,6 +12,7 @@ SETTINGS = {
'show_categories': False,
'show_archive': True,
'posts_per_page': 10,
+ 'enable_rss': True,
}
class WeblogConfig(AppConfig):
diff --git a/weblog/feeds.py b/weblog/feeds.py
new file mode 100644
index 0000000..158e90f
--- /dev/null
+++ b/weblog/feeds.py
@@ -0,0 +1,81 @@
+from django.contrib.syndication.views import Feed
+from django.urls import reverse
+from weblog.models import BlogPost, Translation, Category, CategoryTranslation
+from weblog.apps import SETTINGS as blog_settings
+from django.utils.translation import ugettext_lazy as _, pgettext_lazy
+from django.utils import translation
+
+class BlogFeed(Feed):
+
+ def get_object(self, request, category_slug=None):
+ self.current_language = translation.get_language()
+ if self.current_language is None:
+ self.current_language = settings.LANGUAGE_CODE
+ if category_slug:
+ if category_slug != 'misc':
+ self.category = Category.objects.get(slug=category_slug)
+ self.category_name = self.category.name
+ if blog_settings['multilingual'] and category_slug != 'misc':
+ category_translations = CategoryTranslation.objects.filter(category=self.category)
+ if category_translations.count() > 0:
+ for cat_trans in category_translations:
+ if self.current_language[0:2] == cat_trans.language[0:2]:
+ self.category_name = cat_trans
+ elif category_slug == 'misc':
+ self.category_name = pgettext_lazy('Posts without category', 'Uncategorized')
+ return category_slug
+ return None
+
+ def title(self, obj):
+ if obj:
+ return _('%(blog_title)s\'s %(category_name)s RSS feed') % {'blog_title': blog_settings['blog_title'], 'category_name': self.category_name}
+ return _('%(blog_title)s RSS feed') % {'blog_title': blog_settings['blog_title']}
+
+ def link(self, obj):
+ if obj:
+ return reverse('weblog:CategoryIndex', kwargs={'category_slug': obj})
+ return reverse('weblog:Index')
+
+ def description(self, obj):
+ if obj:
+ return _('Latest %(category_name)s blog posts on %(blog_title)s') % {'blog_title': blog_settings['blog_title'], 'category_name': self.category_name}
+ return _('Latest blog posts on %(blog_title)s') % {'blog_title': blog_settings['blog_title']}
+
+ def items(self, obj):
+ if obj:
+ return BlogPost.objects.filter(category__slug=obj).order_by('-publish_date')[:blog_settings['posts_per_page']]
+ return BlogPost.objects.order_by('-publish_date')[:blog_settings['posts_per_page']]
+
+ def item_title(self, item):
+ translation_exists = False
+ post_translations = Translation.objects.filter(post=item)
+ if post_translations.count() > 0 and blog_settings['multilingual']:
+ orig_lang = item.original_language
+ if len(orig_lang) < 2:
+ orig_lang = settings.LANGUAGE_CODE[0:2]
+ for post_translation in post_translations:
+ if self.current_language[0:2] == post_translation.language[0:2]:
+ return post_translation.title
+ return item.title
+
+ def item_pubdate(self, item):
+ return item.publish_date
+
+ def item_author_name(self, item):
+ if blog_settings['show_author']:
+ if blog_settings['use_authors_username']:
+ return item.author.get_username()
+ return item.author.get_full_name()
+ return None
+
+ def item_description(self, item):
+ translation_exists = False
+ post_translations = Translation.objects.filter(post=item)
+ if post_translations.count() > 0 and blog_settings['multilingual']:
+ orig_lang = item.original_language
+ if len(orig_lang) < 2:
+ orig_lang = settings.LANGUAGE_CODE[0:2]
+ for post_translation in post_translations:
+ if self.current_language[:2] == post_translation.language[:2]:
+ return post_translation.content
+ return item.content
diff --git a/weblog/urls.py b/weblog/urls.py
index 71206bb..ddc2c9f 100755
--- a/weblog/urls.py
+++ b/weblog/urls.py
@@ -1,8 +1,19 @@
from django.conf.urls import url
from . import views
+from weblog.feeds import BlogFeed
+from weblog.apps import SETTINGS as blog_settings
app_name = 'weblog'
-urlpatterns = [
+
+urlpatterns = []
+
+if blog_settings['enable_rss']:
+ urlpatterns += [
+ url(r'^rss/$', BlogFeed(), name='RSS'),
+ url(r'^(?P<category_slug>[-\w]+)/rss/$', BlogFeed(), name='CategoryRSS'),
+ ]
+
+urlpatterns += [
url(r'^$', views.Index, name='Index'),
url(r'^change-language/(?P<language>[-\w]+)/$', views.ChangeLanguage, name='ChangeLanguage'),
url(r'^(?P<year>[0-9]{4})/$', views.Index, name='ArchiveIndex'),