So the average-joe RSS is binary ie either you subscribe to a feed or you don't. This approach results in a ridiculous amount of junk in our inbox. What if the user could define
the feed that he would like to subscribe to? Thanks to the stellar django syndication framework and django filters, I was able to hack together a fix that does just that.
If you have a Book
model like so:
class Book(models.Model): name = models.CharField(max_length=256) pages = models.IntegerField() def __unicode__(self): return self.name
A django_filter FilterSet
like so:
class BookFilterSet(django_filters.FilterSet): pages = django_filters.NumberFilter(lookup_type='lt') class Meta: model = Book fields = ['pages']
A FilteredFeed
class like so:
class BookFilteredFeed(BaseFilteredFeed): model = Book filter_set = BookFilterSet title = "BookFeed" link = "http://localhost:8000" description = "Get alerts for new books - less than given number of pages!" def item_link(self, item): return reverse('book_detail', args=[item.id])
Hook up the necessary urls like so:
urlpatterns = patterns('', url(r'^books/feed$', BookFilteredFeed.as_view(), name='book_feed'), )
And finally, if we have the following 3 books in our DB:
- Introduction to Python (100 pages)
- Introduction to C (300 pages)
- Javascript - The good parts (300 pages)
Hitting http://localhost:8000/books/feed will give you an RSS feed that includes:
- Introduction to Python
- Introduction to C
- Javascript - The good parts
And hitting http://localhost:8000/books/feed?pages=200 will give you an RSS feed that just includes:
- Introduction to Python
You users will forever remain grateful for sparing them the deluge that follows a binary subscription. You will be hailed the king of syndication, worshipped as a rock star and live happily ever after. The best part is that it takes a minute to get started:
pip install django_filtered_feed
Followed ofcourse by including filtered_feed in your INSTALLED_APPS.
INSTALLED_APPS = ( ... 'filtered_feed', ... )