diff options
author | Tom Willemsen | 2012-05-22 00:51:03 +0200 |
---|---|---|
committer | Tom Willemsen | 2012-05-22 00:51:03 +0200 |
commit | 6da8f546246c40b49b9e037c2415452e2c0b1632 (patch) | |
tree | 02358e0a1d6516cd81a03a5b763a34f74dca737b /aggregator | |
parent | 8a1c3a615d9466399c252bd789e9bd5cfd5533fb (diff) | |
download | ryuslash.org-6da8f546246c40b49b9e037c2415452e2c0b1632.tar.gz ryuslash.org-6da8f546246c40b49b9e037c2415452e2c0b1632.zip |
Simpler feed settings
Now this might be a temporary change, but for now configuring feeds is
kept out of the database and placed in the `settings.py'. I am
thinking of adding a web-based interface though, which would also mean
I place everything back in a database.
Diffstat (limited to 'aggregator')
-rw-r--r-- | aggregator/fixtures/initial_data.json | 125 | ||||
-rw-r--r-- | aggregator/management/commands/loadfeeds.py | 126 | ||||
-rw-r--r-- | aggregator/migrations/0001_initial.py | 64 | ||||
-rw-r--r-- | aggregator/migrations/0002_auto__chg_field_post_post_id.py | 49 | ||||
-rw-r--r-- | aggregator/migrations/0003_auto__add_category.py | 70 | ||||
-rw-r--r-- | aggregator/models.py | 45 | ||||
-rw-r--r-- | aggregator/templates/aggregator/base.html | 6 | ||||
-rw-r--r-- | aggregator/templates/aggregator/post_content.html | 21 | ||||
-rw-r--r-- | aggregator/views.py | 11 |
9 files changed, 114 insertions, 403 deletions
diff --git a/aggregator/fixtures/initial_data.json b/aggregator/fixtures/initial_data.json deleted file mode 100644 index 3195aaa..0000000 --- a/aggregator/fixtures/initial_data.json +++ /dev/null @@ -1,125 +0,0 @@ -[ - { - "model": "aggregator.Category", - "pk": 1, - "fields": { - "name": "posts" - } - }, - { - "model": "aggregator.Category", - "pk": 2, - "fields": { - "name": "activity" - } - }, - { - "model": "aggregator.Feed", - "pk": 1, - "fields": { - "name": "Advogato", - "base_url": "http://www.advogato.org/", - "feed_url": "person/ryuslash/rss.xml", - "profile_url": "person/ryuslash", - "favicon_ext": "ico", - "categories": [ 1 ] - } - }, - { - "model": "aggregator.Feed", - "pk": 2, - "fields": { - "name": "Diasp*", - "base_url": "http://diasp.org/", - "feed_url": "public/ryuslash.atom", - "profile_url": "public/ryuslash", - "br2nl": true, - "with_markdown": true, - "categories": [ 1 ] - } - }, - { - "model": "aggregator.Feed", - "pk": 3, - "fields": { - "name": "Identi.ca", - "base_url": "http://identi.ca/", - "feed_url": "api/statuses/user_timeline/107950.rss", - "profile_url": "ryuslash", - "favicon_ext": "ico", - "categories": [ 1 ] - } - }, - { - "model": "aggregator.Feed", - "pk": 4, - "fields": { - "name": "Github", - "base_url": "https://github.com/", - "feed_url": "ryuslash.atom", - "profile_url": "ryuslash", - "categories": [ 2 ] - } - }, - { - "model": "aggregator.Feed", - "pk": 5, - "fields": { - "name": "Gitorious", - "base_url": "https://gitorious.org/", - "feed_url": "~ryuslash/feed.atom", - "profile_url": "~ryuslash", - "categories": [ 2 ] - } - }, - { - "model": "aggregator.Feed", - "pk": 6, - "fields": { - "name": "Ikiwiki", - "base_url": "http://ryuslash.org/wiki/", - "feed_url": "index.rss", - "uses_title": true, - "categories": [ 1 ] - } - }, - { - "model": "aggregator.Feed", - "pk": 7, - "fields": { - "name": "Reddit", - "base_url": "http://www.reddit.com/", - "feed_url": "user/ryuslash/.rss", - "profile_url": "usr/ryuslash/", - "uses_title": true, - "favicon_ext": "ico", - "categories": [ 1 ] - } - }, - { - "model": "aggregator.Feed", - "pk": 8, - "fields": { - "name": "Wordpress", - "base_url": "http://ryuslash.wordpress.com/", - "feed_url": "feed/", - "profile_url": "about/", - "uses_title": true, - "favicon_ext": "ico", - "categories": [ 1 ] - } - }, - { - "model": "aggregator.Feed", - "pk": 9, - "fields": { - "name": "StackOverflow", - "base_url": "http://stackoverflow.com/", - "feed_url": "feeds/user/459915", - "profile_url": "users/459915/ryuslash", - "uses_title": true, - "favicon_ext": "ico", - "categories": [ 1 ] - } - } -] diff --git a/aggregator/management/commands/loadfeeds.py b/aggregator/management/commands/loadfeeds.py index 2bee069..fa493c1 100644 --- a/aggregator/management/commands/loadfeeds.py +++ b/aggregator/management/commands/loadfeeds.py @@ -1,56 +1,98 @@ import feedparser import datetime import markdown +import re +import os +import urllib2 from django.core.management.base import BaseCommand -from aggregator.models import Feed, Post +from aggregator.models import Post +import settings class Command(BaseCommand): help = "Load data from saved feeds." - def handle(self, *args, **kwargs): - feeds = Feed.objects.all() + def prep_feedname(self, value): + value = re.sub('[^\w\s-]', '', value).strip().lower() + return re.sub('[-\s]+', '-', value) + + def get_ext(self, options): + if 'favicon_ext' in options.keys(): + return options['favicon_ext'] + else: + return 'ico' + + def get_logopath(self, feedname, options): + ext = self.get_ext(options) + filename = self.prep_feedname(feedname) + '.' + ext + basedir = os.path.dirname(os.path.abspath(settings.__file__)) + return os.path.join(basedir, 'static/images/logos', filename) + + def have_logo(self, feedname, options): + logopath = self.get_logopath(feedname, options) + return os.path.exists(logopath) + + def save_logo(self, feedname, options): + ext = self.get_ext(options) + url = options['base_url'] + '/favicon.' + ext - for feed in feeds: - parsed = feedparser.parse(feed.get_feed_url()) + try: + logo = urllib2.urlopen(url) + except: + return - if 'title' in parsed.feed: - feed.title = parsed.feed.title + save = open(self.get_logopath(feedname, options), 'w') + + save.write(logo.read()) + save.close() + logo.close() + + def construct_feed_url(self, feed): + return feed['base_url'] + feed['feed_url'] + + def handle(self, *args, **kwargs): + for feedname, feedoptions in settings.FEEDS.iteritems(): + parsed = \ + feedparser.parse(self.construct_feed_url(feedoptions)) + icon = self.prep_feedname(feedname) + '.' \ + + self.get_ext(feedoptions) + newcount = 0 + + if not self.have_logo(feedname, feedoptions): + self.save_logo(feedname, feedoptions) for entry in parsed.entries: - if not Post.objects.filter(post_id=entry.id).exists(): - dt = entry.updated_parsed \ - or entry.published_parsed - - if dt: - updated = datetime.datetime( - dt.tm_year, dt.tm_mon, dt.tm_mday, - dt.tm_hour, dt.tm_min, dt.tm_sec) - else: - updated = datetime.datetime.now() - - post = Post(post_id=entry.id, - title=entry.title, - remote_url=entry.link, - updated=updated, - feed=feed) - - if 'content' in entry.keys(): - content = entry.content[0]['value'] - else: - content = entry.summary - - if feed.with_markdown: - post.body = markdown.markdown(content) - else: - post.body = content - - post.save() - - if feed.post_set.count() > 0: - last_updated = feed.post_set.order_by('-updated')[0]\ - .updated - feed.updated = last_updated - - feed.save() + if Post.objects.filter(post_id=entry.id).exists(): + continue + + dt = entry.updated_parsed \ + or entry.published_parsed + + if dt: + updated = datetime.datetime( + dt.tm_year, dt.tm_mon, dt.tm_mday, + dt.tm_hour, dt.tm_min, dt.tm_sec) + else: + updated = datetime.datetime.now() + + if 'content' in entry.keys(): + content = entry.content[0]['value'] + else: + content = entry.summary + + if feedoptions['markdown']: + content = markdown.markdown(content) + + post = Post(post_id=entry.id, + title=entry.title, + category=feedoptions['category'], + link=entry.link, + updated=updated, + icon=icon, + content=content) + + post.save() + newcount += 1 + + print 'Grabbed %d new feeds from %s' % (newcount, feedname) diff --git a/aggregator/migrations/0001_initial.py b/aggregator/migrations/0001_initial.py index dc3336e..550a389 100644 --- a/aggregator/migrations/0001_initial.py +++ b/aggregator/migrations/0001_initial.py @@ -1,78 +1,40 @@ -# encoding: utf-8 +# -*- coding: utf-8 -*- import datetime from south.db import db from south.v2 import SchemaMigration from django.db import models + class Migration(SchemaMigration): def forwards(self, orm): - - # Adding model 'Feed' - db.create_table('aggregator_feed', ( - ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), - ('name', self.gf('django.db.models.fields.CharField')(max_length=200)), - ('base_url', self.gf('django.db.models.fields.URLField')(max_length=255)), - ('feed_url', self.gf('django.db.models.fields.CharField')(max_length=255)), - ('profile_url', self.gf('django.db.models.fields.CharField')(max_length=255)), - ('favicon_ext', self.gf('django.db.models.fields.CharField')(default='png', max_length=4)), - ('title', self.gf('django.db.models.fields.CharField')(max_length=500, blank=True)), - ('updated', self.gf('django.db.models.fields.DateTimeField')(null=True, blank=True)), - ('uses_title', self.gf('django.db.models.fields.BooleanField')(default=False)), - ('br2nl', self.gf('django.db.models.fields.BooleanField')(default=False)), - ('with_markdown', self.gf('django.db.models.fields.BooleanField')(default=False)), - )) - db.send_create_signal('aggregator', ['Feed']) - # Adding model 'Post' db.create_table('aggregator_post', ( - ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), - ('post_id', self.gf('django.db.models.fields.CharField')(unique=True, max_length=255)), + ('post_id', self.gf('django.db.models.fields.CharField')(unique=True, max_length=255, primary_key=True)), ('title', self.gf('django.db.models.fields.CharField')(max_length=500)), - ('body', self.gf('django.db.models.fields.TextField')()), - ('remote_url', self.gf('django.db.models.fields.URLField')(max_length=255)), + ('category', self.gf('django.db.models.fields.CharField')(max_length=255)), + ('link', self.gf('django.db.models.fields.URLField')(max_length=255)), ('updated', self.gf('django.db.models.fields.DateTimeField')()), - ('added', self.gf('django.db.models.fields.DateTimeField')(auto_now_add=True, blank=True)), - ('feed', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['aggregator.Feed'])), + ('content', self.gf('django.db.models.fields.TextField')()), + ('icon', self.gf('django.db.models.fields.CharField')(max_length=255)), )) db.send_create_signal('aggregator', ['Post']) - def backwards(self, orm): - - # Deleting model 'Feed' - db.delete_table('aggregator_feed') - # Deleting model 'Post' db.delete_table('aggregator_post') - models = { - 'aggregator.feed': { - 'Meta': {'ordering': "['-updated']", 'object_name': 'Feed'}, - 'base_url': ('django.db.models.fields.URLField', [], {'max_length': '255'}), - 'br2nl': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'favicon_ext': ('django.db.models.fields.CharField', [], {'default': "'png'", 'max_length': '4'}), - 'feed_url': ('django.db.models.fields.CharField', [], {'max_length': '255'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '200'}), - 'profile_url': ('django.db.models.fields.CharField', [], {'max_length': '255'}), - 'title': ('django.db.models.fields.CharField', [], {'max_length': '500', 'blank': 'True'}), - 'updated': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}), - 'uses_title': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'with_markdown': ('django.db.models.fields.BooleanField', [], {'default': 'False'}) - }, 'aggregator.post': { 'Meta': {'ordering': "['-updated']", 'object_name': 'Post'}, - 'added': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), - 'body': ('django.db.models.fields.TextField', [], {}), - 'feed': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['aggregator.Feed']"}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'post_id': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '500'}), - 'remote_url': ('django.db.models.fields.URLField', [], {'max_length': '255'}), + 'category': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'content': ('django.db.models.fields.TextField', [], {}), + 'icon': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'link': ('django.db.models.fields.URLField', [], {'max_length': '255'}), + 'post_id': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '255', 'primary_key': 'True'}), 'title': ('django.db.models.fields.CharField', [], {'max_length': '500'}), 'updated': ('django.db.models.fields.DateTimeField', [], {}) } } - complete_apps = ['aggregator'] + complete_apps = ['aggregator']
\ No newline at end of file diff --git a/aggregator/migrations/0002_auto__chg_field_post_post_id.py b/aggregator/migrations/0002_auto__chg_field_post_post_id.py deleted file mode 100644 index 906ed2d..0000000 --- a/aggregator/migrations/0002_auto__chg_field_post_post_id.py +++ /dev/null @@ -1,49 +0,0 @@ -# encoding: utf-8 -import datetime -from south.db import db -from south.v2 import SchemaMigration -from django.db import models - -class Migration(SchemaMigration): - - def forwards(self, orm): - - # Changing field 'Post.post_id' - db.alter_column('aggregator_post', 'post_id', self.gf('django.db.models.fields.CharField')(unique=True, max_length=255)) - - - def backwards(self, orm): - - # Changing field 'Post.post_id' - db.alter_column('aggregator_post', 'post_id', self.gf('django.db.models.fields.CharField')(max_length=500, unique=True)) - - - models = { - 'aggregator.feed': { - 'Meta': {'ordering': "['-updated']", 'object_name': 'Feed'}, - 'base_url': ('django.db.models.fields.URLField', [], {'max_length': '255'}), - 'br2nl': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'favicon_ext': ('django.db.models.fields.CharField', [], {'default': "'png'", 'max_length': '4'}), - 'feed_url': ('django.db.models.fields.CharField', [], {'max_length': '255'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '200'}), - 'profile_url': ('django.db.models.fields.CharField', [], {'max_length': '255'}), - 'title': ('django.db.models.fields.CharField', [], {'max_length': '500', 'blank': 'True'}), - 'updated': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}), - 'uses_title': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'with_markdown': ('django.db.models.fields.BooleanField', [], {'default': 'False'}) - }, - 'aggregator.post': { - 'Meta': {'ordering': "['-updated']", 'object_name': 'Post'}, - 'added': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), - 'body': ('django.db.models.fields.TextField', [], {}), - 'feed': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['aggregator.Feed']"}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'post_id': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '255'}), - 'remote_url': ('django.db.models.fields.URLField', [], {'max_length': '255'}), - 'title': ('django.db.models.fields.CharField', [], {'max_length': '500'}), - 'updated': ('django.db.models.fields.DateTimeField', [], {}) - } - } - - complete_apps = ['aggregator'] diff --git a/aggregator/migrations/0003_auto__add_category.py b/aggregator/migrations/0003_auto__add_category.py deleted file mode 100644 index 9997320..0000000 --- a/aggregator/migrations/0003_auto__add_category.py +++ /dev/null @@ -1,70 +0,0 @@ -# encoding: utf-8 -import datetime -from south.db import db -from south.v2 import SchemaMigration -from django.db import models - -class Migration(SchemaMigration): - - def forwards(self, orm): - - # Adding model 'Category' - db.create_table('aggregator_category', ( - ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), - ('name', self.gf('django.db.models.fields.SlugField')(max_length=50, db_index=True)), - )) - db.send_create_signal('aggregator', ['Category']) - - # Adding M2M table for field categories on 'Feed' - db.create_table('aggregator_feed_categories', ( - ('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)), - ('feed', models.ForeignKey(orm['aggregator.feed'], null=False)), - ('category', models.ForeignKey(orm['aggregator.category'], null=False)) - )) - db.create_unique('aggregator_feed_categories', ['feed_id', 'category_id']) - - - def backwards(self, orm): - - # Deleting model 'Category' - db.delete_table('aggregator_category') - - # Removing M2M table for field categories on 'Feed' - db.delete_table('aggregator_feed_categories') - - - models = { - 'aggregator.category': { - 'Meta': {'object_name': 'Category'}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.SlugField', [], {'max_length': '50', 'db_index': 'True'}) - }, - 'aggregator.feed': { - 'Meta': {'ordering': "['-updated']", 'object_name': 'Feed'}, - 'base_url': ('django.db.models.fields.URLField', [], {'max_length': '255'}), - 'br2nl': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'categories': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['aggregator.Category']", 'symmetrical': 'False'}), - 'favicon_ext': ('django.db.models.fields.CharField', [], {'default': "'png'", 'max_length': '4'}), - 'feed_url': ('django.db.models.fields.CharField', [], {'max_length': '255'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '200'}), - 'profile_url': ('django.db.models.fields.CharField', [], {'max_length': '255'}), - 'title': ('django.db.models.fields.CharField', [], {'max_length': '500', 'blank': 'True'}), - 'updated': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}), - 'uses_title': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'with_markdown': ('django.db.models.fields.BooleanField', [], {'default': 'False'}) - }, - 'aggregator.post': { - 'Meta': {'ordering': "['-updated']", 'object_name': 'Post'}, - 'added': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), - 'body': ('django.db.models.fields.TextField', [], {}), - 'feed': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['aggregator.Feed']"}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'post_id': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '255'}), - 'remote_url': ('django.db.models.fields.URLField', [], {'max_length': '255'}), - 'title': ('django.db.models.fields.CharField', [], {'max_length': '500'}), - 'updated': ('django.db.models.fields.DateTimeField', [], {}) - } - } - - complete_apps = ['aggregator'] diff --git a/aggregator/models.py b/aggregator/models.py index 4936821..34fb5a3 100644 --- a/aggregator/models.py +++ b/aggregator/models.py @@ -1,47 +1,14 @@ from django.db import models -class Category(models.Model): - name = models.SlugField() - - def __unicode__(self): - return self.name.capitalize() - -class Feed(models.Model): - name = models.CharField(max_length=200) - base_url = models.URLField(max_length=255) - feed_url = models.CharField(max_length=255) - profile_url = models.CharField(max_length=255) - favicon_ext = models.CharField(max_length=4, default="png") - title = models.CharField(max_length=500, blank=True) - updated = models.DateTimeField(null=True, blank=True) - uses_title = models.BooleanField(default=False) - br2nl = models.BooleanField(default=False) - with_markdown = models.BooleanField(default=False) - categories = models.ManyToManyField(Category) - - def get_profile_url(self): - return self.base_url + self.profile_url - - def get_feed_url(self): - return self.base_url + self.feed_url - - def get_favicon_url(self): - return self.base_url + 'favicon.' + self.favicon_ext - - def __unicode__(self): - return self.name - - class Meta: - ordering = [ '-updated' ] - class Post(models.Model): - post_id = models.CharField(max_length=255, unique=True) + post_id = models.CharField(max_length=255, unique=True, + primary_key=True) title = models.CharField(max_length=500) - body = models.TextField() - remote_url = models.URLField(max_length=255) + category = models.CharField(max_length=255) + link = models.URLField(max_length=255) updated = models.DateTimeField() - added = models.DateTimeField(auto_now_add=True) - feed = models.ForeignKey(Feed) + content = models.TextField() + icon = models.CharField(max_length=255) class Meta: ordering = [ '-updated' ] diff --git a/aggregator/templates/aggregator/base.html b/aggregator/templates/aggregator/base.html index 8f752bd..4a24135 100644 --- a/aggregator/templates/aggregator/base.html +++ b/aggregator/templates/aggregator/base.html @@ -19,10 +19,8 @@ </h1> <h2 id="sitesubtitle"> Will this ever really be my website? - {% for category in categories %} - <a class="category" - href="/{{ category.name|slugify }}/">{{ category.name }}</a> - {% endfor %} + <a class="category" href="/activity/">Activities</a> + <a class="category" href="/post/">Posts</a> </h2> </hgroup> </header> diff --git a/aggregator/templates/aggregator/post_content.html b/aggregator/templates/aggregator/post_content.html index e47de93..dc04741 100644 --- a/aggregator/templates/aggregator/post_content.html +++ b/aggregator/templates/aggregator/post_content.html @@ -1,34 +1,23 @@ -<article class="post {{ post.feed.name|slugify }}"> +<article class="post"> <header> <hgroup> <h1> <a href="/post/{{ post.pk }}/"> - <img src="{{ post.feed.get_favicon_url }}" /> + <img src="/static/images/logos/{{ post.icon }}" /> </a> <a href="/post/{{ post.pk }}/"> - {% if post.feed.uses_title %} - {{ post.title }} - {% else %} - {{ post.updated }} - {% endif %} + {{ post.title }} </a> </h1> <h2 class="postsubtitle"> - Via - <a href="{{ post.feed.base_url }}">{{ post.feed.name }}</a> - (<a href="{{ post.feed.get_profile_url }}">profile</a>, - <a href="{{ post.remote_url }}">origin</a>) + (<a href="{{ post.link }}">origin</a>) </h2> </hgroup> </header> <div class="postcontent"> {% autoescape off %} - {% if post.feed.br2nl %} - {{ post.body|linebreaks }} - {% else %} - {{ post.body }} - {% endif %} + {{ post.content }} {% endautoescape %} </div> </article> diff --git a/aggregator/views.py b/aggregator/views.py index aaea0f9..510df48 100644 --- a/aggregator/views.py +++ b/aggregator/views.py @@ -3,12 +3,11 @@ from django.http import Http404 from django.shortcuts import render from django.views.generic.base import TemplateView -from .models import Post, Feed, Category +from .models import Post def posts(request, cat, page=1): - category = cat or 'posts' - queryset = Post.objects.filter(feed__categories__name=category) - feeds = Feed.objects.filter(categories__name=category) + category = cat or 'post' + queryset = Post.objects.filter(category=category) paginator = Paginator(queryset, 20) if page == None: @@ -21,6 +20,4 @@ def posts(request, cat, page=1): return render(request, 'aggregator/posts.html', { 'list': object_list, - 'feeds': feeds, - 'category': category, - 'categories': Category.objects.order_by('name') }) + 'category': category }) |