1 from django
.db
import models
2 from django
.utils
.translation
import ugettext_lazy
as _
6 class SiteManager(models
.Manager
):
9 Returns the current ``Site`` based on the SITE_ID in the
10 project's settings. The ``Site`` object is cached the first
11 time it's retrieved from the database.
13 from django
.conf
import settings
15 sid
= settings
.SITE_ID
16 except AttributeError:
17 from django
.core
.exceptions
import ImproperlyConfigured
18 raise ImproperlyConfigured("You're using the Django \"sites framework\" without having set the SITE_ID setting. Create a site in your database and set the SITE_ID setting to fix this error.")
20 current_site
= SITE_CACHE
[sid
]
22 current_site
= self
.get(pk
=sid
)
23 SITE_CACHE
[sid
] = current_site
26 def clear_cache(self
):
27 """Clears the ``Site`` object cache."""
31 class Site(models
.Model
):
32 domain
= models
.CharField(_('domain name'), max_length
=100)
33 name
= models
.CharField(_('display name'), max_length
=50)
34 objects
= SiteManager()
37 db_table
= 'django_site'
38 verbose_name
= _('site')
39 verbose_name_plural
= _('sites')
40 ordering
= ('domain',)
42 def __unicode__(self
):
45 def save(self
, *args
, **kwargs
):
46 super(Site
, self
).save(*args
, **kwargs
)
47 # Cached information will likely be incorrect now.
48 if self
.id in SITE_CACHE
:
49 del SITE_CACHE
[self
.id]
53 super(Site
, self
).delete()
59 class RequestSite(object):
61 A class that shares the primary interface of Site (i.e., it has
62 ``domain`` and ``name`` attributes) but gets its data from a Django
63 HttpRequest object rather than from a database.
65 The save() and delete() methods raise NotImplementedError.
67 def __init__(self
, request
):
68 self
.domain
= self
.name
= request
.get_host()
70 def __unicode__(self
):
73 def save(self
, force_insert
=False, force_update
=False):
74 raise NotImplementedError('RequestSite cannot be saved.')
77 raise NotImplementedError('RequestSite cannot be deleted.')