summaryrefslogtreecommitdiff
path: root/docs
diff options
context:
space:
mode:
authorMalcolm Tredinnick <malcolm.tredinnick@gmail.com>2007-11-29 17:41:35 +0000
committerMalcolm Tredinnick <malcolm.tredinnick@gmail.com>2007-11-29 17:41:35 +0000
commitf86e54e3b0520fa954e1cabbf67752ef9b99c78f (patch)
tree70f93748f6c8293eadbc0131ff05dcf8f3e77e1a /docs
parentd94ed44c5df7313bce825d17a8f3e7dff9451365 (diff)
Added better error handling in the basic feed class example. Refs #5855
git-svn-id: http://code.djangoproject.com/svn/django/trunk@6741 bcc190cf-cafb-0310-a4f2-bffc1f526a37
Diffstat (limited to 'docs')
-rw-r--r--docs/syndication_feeds.txt15
1 files changed, 13 insertions, 2 deletions
diff --git a/docs/syndication_feeds.txt b/docs/syndication_feeds.txt
index 30943591b8..2eb188a737 100644
--- a/docs/syndication_feeds.txt
+++ b/docs/syndication_feeds.txt
@@ -201,6 +201,8 @@ the feed.
An example makes this clear. Here's the code for these beat-specific feeds::
+ from django.contrib.syndication import FeedDoesNotExist
+
class BeatFeed(Feed):
def get_object(self, bits):
# In case of "/rss/beats/0613/foo/bar/baz/", or other such clutter,
@@ -213,6 +215,8 @@ An example makes this clear. Here's the code for these beat-specific feeds::
return "Chicagocrime.org: Crimes for beat %s" % obj.beat
def link(self, obj):
+ if not obj:
+ raise FeedDoesNotExist
return obj.get_absolute_url()
def description(self, obj):
@@ -246,11 +250,18 @@ request to the URL ``/rss/beats/0613/``:
each of ``title``, ``link`` and ``description``, Django follows this
algorithm:
- * First, it tries to call a method, passing the ``obj`` argument, where
- ``obj`` is the object returned by ``get_object()``.
+ * First, it tries to call a method, passing the ``obj`` argument,
+ where ``obj`` is the object returned by ``get_object()``.
* Failing that, it tries to call a method with no arguments.
* Failing that, it uses the class attribute.
+ Inside the ``link()`` method, we handle the possibility that ``obj``
+ might be ``None``, which can occur when the URL isn't fully specified. In
+ some cases, you might want to do something else in this case, which would
+ mean you'd need to check for ``obj`` existing in other methods as well
+ (the ``link()`` method is called very early in the feed generation
+ process, so is a good place to bail out early).
+
* Finally, note that ``items()`` in this example also takes the ``obj``
argument. The algorithm for ``items`` is the same as described in the
previous step -- first, it tries ``items(obj)``, then ``items()``, then