Example #1
0
def get_feeds():
    """Return a dictionary containing `configuration_key` and feed class pairs
    for all configurations that have `use_generic_feeds` set to True.
    
    """
    feeds = {}
    for _configuration_key, _configuration in blogs.all():
        if not _configuration.use_generic_feeds:
            continue

        class EntryFeed(Feed):
            configuration = _configuration
            configuration_key = _configuration_key

            title_template = _configuration.feed_title_template_name
            description_template = \
                _configuration.feed_description_template_name

            feed_type = feedgenerator.Rss201rev2Feed

            def get_site(self):
                if not hasattr(self, '_current_site'):
                    self._current_site = Site.objects.get_current()
                return self._current_site

            def title(self):
                if self.configuration.feed_title is not None:
                    return self.configuration.feed_title
                return self.get_site().name
                
            def link(self):
                if self.configuration.feed_link is not None:
                    return self.configuration.feed_link
                return "http://%s/" % (self.get_site().domain)
                
            def description(self):
                if self.configuration.feed_description is not None:
                    return self.configuration.feed_description
                return "Latest entries on %s" % self.get_site().name
                                                             
            def items(self):
                items = self.configuration.model.live.all()
                return items[:self.configuration.feed_limit]
                
            def item_pubdate(self, obj):
                return obj.pub_date

            def item_link(self, obj):
                return self.configuration.get_entry_absolute_url(obj)

        if _configuration.feed_format == feed_formats.ATOM:
            # Alter the class to support Atom feeds instead of RSS.
            EntryFeed.feed_type = feedgenerator.Atom1Feed
            EntryFeed.subtitle = EntryFeed.description

        feeds[_configuration_key] = EntryFeed
    return feeds
Example #2
0
from django import forms
from django.contrib import admin
from django.utils.translation import ugettext_lazy as _

from blog_base.models import Category
from blog_base import blogs

class CategoryOptions(admin.ModelAdmin):
    prepopulated_fields = { 'slug': ('name', ) }


# Create and register dynamic ModelAdmin subclasses for each configuration
# that has use_generic_admin set to True.
for (_configuration_key, _configuration) in blogs.all():
    if not _configuration.use_generic_admin:
        continue

    # Define a custom form to set initial value of input format field.
    class Form(forms.ModelForm):
        def __init__(self, *args, **kwargs):
            super(Form, self).__init__(*args, **kwargs)
            self.fields['input_format'].initial = _configuration.markup_format

            class Meta:
                model = _configuration.model


    class Admin(admin.ModelAdmin):
        configuration = _configuration
        configuration_key = _configuration_key