Changeset 6180
- Timestamp:
- 09/14/07 03:37:09 (1 year ago)
- Files:
-
- django/trunk/django/contrib/sites/models.py (modified) (2 diffs)
- django/trunk/docs/sites.txt (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
django/trunk/django/contrib/sites/models.py
r6174 r6180 3 3 from django.http import get_host 4 4 5 SITE_CACHE = {} 6 5 7 class SiteManager(models.Manager): 6 8 def get_current(self): 9 """ 10 Returns the current ``Site`` based on the SITE_ID in the 11 project's settings. The ``Site`` object is cached the first 12 time it's retrieved from the database. 13 """ 7 14 from django.conf import settings 8 15 try: … … 11 18 from django.core.exceptions import ImproperlyConfigured 12 19 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.") 13 return self.get(pk=sid) 20 try: 21 current_site = SITE_CACHE[sid] 22 except KeyError: 23 current_site = self.get(pk=sid) 24 SITE_CACHE[sid] = current_site 25 return current_site 26 27 def clear_cache(self): 28 """Clears the ``Site`` object cache.""" 29 global SITE_CACHE 30 SITE_CACHE = {} 14 31 15 32 class Site(models.Model): django/trunk/docs/sites.txt
r6144 r6180 213 213 >>> 'http://%s%s' % (Site.objects.get_current().domain, obj.get_absolute_url()) 214 214 'http://example.com/mymodel/objects/3/' 215 216 Caching the current ``Site`` object 217 =================================== 218 219 **New in Django development version** 220 221 As the current site is stored in the database, each call to 222 ``Site.objects.get_current()`` could result in a database query. But Django is a 223 little cleverer than that: on the first request, the current site is cached, and 224 any subsequent call returns the cached data instead of hitting the database. 225 226 If for any reason you want to force a database query, you can tell Django to 227 clear the cache using ``Site.objects.clear_cache()``:: 228 229 # First call; current site fetched from database. 230 current_site = Site.objects.get_current() 231 # ... 232 233 # Second call; current site fetched from cache. 234 current_site = Site.objects.get_current() 235 # ... 236 237 # Force a database query for the third call. 238 Site.objects.clear_cache() 239 current_site = Site.objects.get_current() 215 240 216 241 The ``CurrentSiteManager``
