```{include} _templates/nav.html ``` # Buildable feeds You can build a RSS feed in much the same manner as {doc}`buildable class-based views `. ## BuildableFeed ```{eval-rst} .. py:class:: BuildableFeed(Feed, BuildableMixin) Extends `the base Django Feed class `_ to be buildable. Configure it in the same way you configure that plus our bakery options listed below. .. py:attribute:: build_path The target location of the flat file in the ``BUILD_DIR``. Optional. The default is ``latest.xml``, would place the flat file at the site's root. Defining it as ``foo/latest.xml`` would place the flat file inside a subdirectory. .. py:attribute:: build_method An alias to the ``build_queryset`` method used by the :doc:`management commands `. .. py:method:: build_queryset() Writes the rendered template's HTML to a flat file. Only override this if you know what you're doing. .. py:method:: get_queryset() The ``Feed`` class allows a single feed instance to return different content for requests to different URLs. The "subject" for a request is determinted by the object returned from the ``get_object`` method, by default ``None``. (See `the Django docs ` for details.) Override this method to provide a collection of "subjects" for which bakery should render the feed. As in Django, you can replace certain bakery feed attributes (such as ``build_path``) with methods that accept the subject as an extra "obj" parameter. **Example myapp/feeds.py** .. code-block:: python import os from myapp.models import MyModel, MyParentModel from bakery.feeds import BuildableFeed class ExampleRSSFeed(BuildableFeed): link = '/' feed_url = '/rss.xml' build_path = 'rss.xml' def items(self): return MyModel.objects.filter(is_published=True) class ExampleFeedWithSubject(BuildableFeed): def get_object(self, request, obj_id): return MyParentModel.objects.get(pk=obj_id) def get_queryset(self): return MyParentModel.objects.filter(is_published=True) def get_content(self, obj): return super().get_content(obj.id) def link(self, obj): return obj.get_absolute_url() def feed_url(self, obj): return os.path.join(obj.get_absolute_url(), 'rss.xml') def build_path(self, obj): return self.feed_url(obj)[1:] # Discard initial slash def items(self, obj): return MyModel.objects.filter(parent__id=obj.id) ```