Образцовое наследование и платформа Канала RSS

Я использую образцовое наследование для управления многоуровневыми моделями queryset:

from django.db import models
from django.contrib.sites.models import Site
from django.contrib.auth.models import User
from imagekit.models import ImageModel
import datetime

class Entry(models.Model):
    date_pub = models.DateTimeField(default=datetime.datetime.now)
    author = models.ForeignKey(User)
    via = models.URLField(blank=True)
    comments_allowed = models.BooleanField(default=True)

    class IKOptions:
        spec_module = 'journal.icon_specs'
        cache_dir = 'icon/resized'
        image_field = 'icon'


class Post(Entry):  
    title = models.CharField(max_length=200)
    description = models.TextField()
    slug = models.SlugField(unique=True)

    def __unicode__(self):
        return self.title


class Photo(Entry):
    alt = models.CharField(max_length=200)
    description = models.TextField(blank=True)
    original = models.ImageField(upload_to='photo/')    

    def __unicode__(self):
        return self.alt


class Quote(Entry):
    blockquote = models.TextField()
    cite = models.TextField(blank=True)

    def __unicode__(self):
        return self.blockquote

Условного шаблона достаточно для рендеринга правильных отрывков HTML с целью на основе Entry.objects.all ():

{% extends "base.html" %}
{% block main %}
<hr>
{% for entry in entries %}

{% if entry.post %}
[...do something with entry.post]
{% endif %}

{% if entry.photo %}
[...do something with entry.photo]
{% endif %}

[...and so on]

Теперь я пытаюсь генерировать канал RSS с помощью новой Платформы Канала, показанной в Django 1.2, но без любой удачи... Упрощенные настройки платформы не позволяют мне указать условное выражение item_title и item_description на основе дочерних объектов Записи:

from django.contrib.syndication.views import Feed
from totanus.journal.models import Entry, Photo, Post, Quote


class LatestEntriesFeed(Feed):
    title = "RSS Feed"
    link = "/journal/"
    description = "Journal RSS"

    def items(self):
           return Entry.objects.order_by('-date_pub')[:10]

    def item_title(self, item):
           # if child is Post
           return item.post.title # this isn't working, of course...

Я должен создать пользовательский набор шаблона представления для управления созданием RSS и синдикацией или являюсь там способом использовать платформу Канала с этой разделенной на подклассы моделью?

1
задан Matteo 14 June 2010 в 20:50
поделиться

1 ответ

У вас есть два варианта:

  1. использовать атрибуты title_template и description_template в классе Feed, чтобы указать на шаблоны, которые могут обрабатывать очень общие входная переменная.

  2. Воссоздайте логику шаблона в методах класса канала, чтобы переменная шаблона получала нормализованный фрагмент данных.

Любой из них приведет вас к одной и той же конечной точке.

2
ответ дан 2 September 2019 в 23:46
поделиться
Другие вопросы по тегам:

Похожие вопросы: