mirror of https://github.com/django/django.git
Improved syndication feed framework to use RequestSite if the sites framework is not installed -- i.e., the sites framework is no longer required to use the syndication feed framework. This is backwards incompatible if anybody has subclassed Feed and overridden __init__(), because the second parameter is now expected to be an HttpRequest object instead of request.path
git-svn-id: http://code.djangoproject.com/svn/django/trunk@5654 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
parent
dcd5750d7a
commit
090aa5210e
|
@ -1,6 +1,6 @@
|
||||||
from django.core.exceptions import ImproperlyConfigured, ObjectDoesNotExist
|
from django.core.exceptions import ImproperlyConfigured, ObjectDoesNotExist
|
||||||
from django.template import Context, loader, Template, TemplateDoesNotExist
|
from django.template import Context, loader, Template, TemplateDoesNotExist
|
||||||
from django.contrib.sites.models import Site
|
from django.contrib.sites.models import Site, RequestSite
|
||||||
from django.utils import feedgenerator
|
from django.utils import feedgenerator
|
||||||
from django.utils.encoding import smart_unicode, iri_to_uri
|
from django.utils.encoding import smart_unicode, iri_to_uri
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
|
@ -22,9 +22,10 @@ class Feed(object):
|
||||||
title_template = None
|
title_template = None
|
||||||
description_template = None
|
description_template = None
|
||||||
|
|
||||||
def __init__(self, slug, feed_url):
|
def __init__(self, slug, request):
|
||||||
self.slug = slug
|
self.slug = slug
|
||||||
self.feed_url = feed_url
|
self.request = request
|
||||||
|
self.feed_url = request.path
|
||||||
self.title_template_name = self.title_template or ('feeds/%s_title.html' % slug)
|
self.title_template_name = self.title_template or ('feeds/%s_title.html' % slug)
|
||||||
self.description_template_name = self.description_template or ('feeds/%s_description.html' % slug)
|
self.description_template_name = self.description_template or ('feeds/%s_description.html' % slug)
|
||||||
|
|
||||||
|
@ -67,7 +68,11 @@ class Feed(object):
|
||||||
else:
|
else:
|
||||||
obj = None
|
obj = None
|
||||||
|
|
||||||
current_site = Site.objects.get_current()
|
if Site._meta.installed:
|
||||||
|
current_site = Site.objects.get_current()
|
||||||
|
else:
|
||||||
|
current_site = RequestSite(self.request)
|
||||||
|
|
||||||
link = self.__get_dynamic_attr('link', obj)
|
link = self.__get_dynamic_attr('link', obj)
|
||||||
link = add_domain(current_site.domain, link)
|
link = add_domain(current_site.domain, link)
|
||||||
|
|
||||||
|
|
|
@ -16,7 +16,7 @@ def feed(request, url, feed_dict=None):
|
||||||
raise Http404, "Slug %r isn't registered." % slug
|
raise Http404, "Slug %r isn't registered." % slug
|
||||||
|
|
||||||
try:
|
try:
|
||||||
feedgen = f(slug, request.path).get_feed(param)
|
feedgen = f(slug, request).get_feed(param)
|
||||||
except feeds.FeedDoesNotExist:
|
except feeds.FeedDoesNotExist:
|
||||||
raise Http404, "Invalid feed parameters. Slug %r is valid, but other parameters, or lack thereof, are not." % slug
|
raise Http404, "Invalid feed parameters. Slug %r is valid, but other parameters, or lack thereof, are not." % slug
|
||||||
|
|
||||||
|
|
|
@ -31,6 +31,12 @@ To create a feed, just write a ``Feed`` class and point to it in your URLconf_.
|
||||||
Initialization
|
Initialization
|
||||||
--------------
|
--------------
|
||||||
|
|
||||||
|
If you're not using the latest Django development version, you'll need to make
|
||||||
|
sure Django's sites framework is installed -- including its database table.
|
||||||
|
(See the `sites framework documentation`_ for more information.) This has
|
||||||
|
changed in the Django development version; the syndication feed framework no
|
||||||
|
longer requires the sites framework.
|
||||||
|
|
||||||
To activate syndication feeds on your Django site, add this line to your
|
To activate syndication feeds on your Django site, add this line to your
|
||||||
URLconf_::
|
URLconf_::
|
||||||
|
|
||||||
|
@ -72,6 +78,7 @@ The above example registers two feeds:
|
||||||
|
|
||||||
Once that's set up, you just need to define the ``Feed`` classes themselves.
|
Once that's set up, you just need to define the ``Feed`` classes themselves.
|
||||||
|
|
||||||
|
.. _sites framework documentation: ../sites/
|
||||||
.. _URLconf: ../url_dispatch/
|
.. _URLconf: ../url_dispatch/
|
||||||
.. _settings file: ../settings/
|
.. _settings file: ../settings/
|
||||||
|
|
||||||
|
@ -131,9 +138,14 @@ put into those elements.
|
||||||
|
|
||||||
* ``{{ obj }}`` -- The current object (one of whichever objects you
|
* ``{{ obj }}`` -- The current object (one of whichever objects you
|
||||||
returned in ``items()``).
|
returned in ``items()``).
|
||||||
* ``{{ site }}`` -- A ``django.models.core.sites.Site`` object
|
* ``{{ site }}`` -- A ``django.contrib.sites.models.Site`` object
|
||||||
representing the current site. This is useful for
|
representing the current site. This is useful for
|
||||||
``{{ site.domain }}`` or ``{{ site.name }}``.
|
``{{ site.domain }}`` or ``{{ site.name }}``. Note that if you're
|
||||||
|
using the latest Django development version and do *not* have the
|
||||||
|
Django sites framework installed, this will be set to a
|
||||||
|
``django.contrib.sites.models.RequestSite`` object. See the
|
||||||
|
`RequestSite section of the sites framework documentation`_ for
|
||||||
|
more.
|
||||||
|
|
||||||
If you don't create a template for either the title or description, the
|
If you don't create a template for either the title or description, the
|
||||||
framework will use the template ``"{{ obj }}"`` by default -- that is,
|
framework will use the template ``"{{ obj }}"`` by default -- that is,
|
||||||
|
@ -164,6 +176,7 @@ put into those elements.
|
||||||
.. _chicagocrime.org: http://www.chicagocrime.org/
|
.. _chicagocrime.org: http://www.chicagocrime.org/
|
||||||
.. _object-relational mapper: ../db-api/
|
.. _object-relational mapper: ../db-api/
|
||||||
.. _Django templates: ../templates/
|
.. _Django templates: ../templates/
|
||||||
|
.. _RequestSite section of the sites framework documentation: ../sites/#requestsite-objects
|
||||||
|
|
||||||
A complex example
|
A complex example
|
||||||
-----------------
|
-----------------
|
||||||
|
|
Loading…
Reference in New Issue