Skip to content

Commit

Permalink
add caching of URLs. Reload cache with URL generation on restart.
Browse files Browse the repository at this point in the history
  • Loading branch information
gabrielgrant committed Feb 1, 2011
1 parent 20604cb commit 92349c8
Show file tree
Hide file tree
Showing 3 changed files with 103 additions and 6 deletions.
86 changes: 86 additions & 0 deletions easy_pages/migrations/0004_auto__add_field_page_url_cache.py
@@ -0,0 +1,86 @@
# encoding: utf-8
import datetime
from south.db import db
from south.v2 import SchemaMigration
from django.db import models

class Migration(SchemaMigration):

def forwards(self, orm):

# Adding field 'Page.url_cache'
db.add_column('easy_pages_page', 'url_cache', self.gf('django.db.models.fields.CharField')(default='', max_length=256, blank=True), keep_default=False)


def backwards(self, orm):

# Deleting field 'Page.url_cache'
db.delete_column('easy_pages_page', 'url_cache')


models = {
'contenttypes.contenttype': {
'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
},
'easy_pages.contentblock': {
'Meta': {'ordering': "('_order',)", 'unique_together': "(('name', 'page'),)", 'object_name': 'ContentBlock'},
'_html_content_cache': ('django.db.models.fields.TextField', [], {'default': "''"}),
'_order': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
'block_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['easy_pages.ContentBlockType']"}),
'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']", 'null': 'True'}),
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'name': ('python_identifier_field.db.models.fields.PythonIdentifierField', [], {'max_length': '50'}),
'page': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'content_blocks'", 'to': "orm['easy_pages.Page']"}),
'title': ('django.db.models.fields.CharField', [], {'max_length': '128', 'blank': 'True'})
},
'easy_pages.contentblocktype': {
'Meta': {'object_name': 'ContentBlockType'},
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'name': ('python_identifier_field.db.models.fields.PythonIdentifierField', [], {'unique': 'True', 'max_length': '50'})
},
'easy_pages.image': {
'Meta': {'object_name': 'Image'},
'_old_image_source_for_display_image': ('django.db.models.fields.files.ImageField', [], {'max_length': '100'}),
'caption': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
'content_block': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'images'", 'to': "orm['easy_pages.ContentBlock']"}),
'credit': ('django.db.models.fields.CharField', [], {'max_length': '200', 'blank': 'True'}),
'display_image': ('static_filtered_images.fields.FilteredImageField', [], {'no_old_src_field': 'True', 'max_length': '100'}),
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'image': ('django.db.models.fields.files.ImageField', [], {'max_length': '100'})
},
'easy_pages.page': {
'Meta': {'unique_together': "(('slug', 'parent'),)", 'object_name': 'Page'},
'changefreq': ('django.db.models.fields.CharField', [], {'max_length': '1', 'blank': 'True'}),
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'lastmod': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}),
'level': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}),
'lft': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}),
'page_type': ('django.db.models.fields.CharField', [], {'default': "'norm'", 'max_length': '4'}),
'parent': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'children'", 'null': 'True', 'to': "orm['easy_pages.Page']"}),
'priority': ('django.db.models.fields.FloatField', [], {'default': '0.5', 'blank': 'True'}),
'published': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
'rght': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}),
'show_in_menu': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
'slug': ('django.db.models.fields.SlugField', [], {'max_length': '50', 'db_index': 'True'}),
'template': ('django.db.models.fields.FilePathField', [], {'default': "''", 'path': "'/home/gabriel/Documents/alton mill/site2/alton_mill/settings/../templates/easy_pages'", 'max_length': '100', 'match': "'.*\\\\.html$'", 'blank': 'True'}),
'title': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
'tree_id': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}),
'url_cache': ('django.db.models.fields.CharField', [], {'max_length': '256', 'blank': 'True'})
},
'easy_pages.rawhtmlcontentblock': {
'Meta': {'ordering': "('_order',)", 'object_name': 'RawHTMLContentBlock', '_ormbases': ['easy_pages.ContentBlock']},
'content': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
'contentblock_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['easy_pages.ContentBlock']", 'unique': 'True', 'primary_key': 'True'})
},
'easy_pages.restrictedhtmlcontentblock': {
'Meta': {'ordering': "('_order',)", 'object_name': 'RestrictedHTMLContentBlock', '_ormbases': ['easy_pages.ContentBlock']},
'content': ('html_field.db.models.fields.HTMLField', [], {'blank': 'True'}),
'contentblock_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['easy_pages.ContentBlock']", 'unique': 'True', 'primary_key': 'True'})
}
}

complete_apps = ['easy_pages']
21 changes: 16 additions & 5 deletions easy_pages/models.py
Expand Up @@ -30,6 +30,11 @@ class Page(MPTTModel):
title = models.CharField(max_length=128)
slug = models.SlugField()
parent = models.ForeignKey('self', related_name='children', null=True, blank=True)
url_cache = models.CharField(
max_length=256,
blank=True, # url for home is '/'; blank means no cached value
editable=False,
)
published = models.BooleanField(default=True)
show_in_menu = models.BooleanField(default=True)
page_type = models.CharField(max_length=4, choices=PAGE_CHOICES, default='norm')
Expand Down Expand Up @@ -57,12 +62,18 @@ def __unicode__(self):
class Meta:
unique_together = ('slug', 'parent')

def get_absolute_url(self):
u = '/'+'/'.join([i.slug for i in self.get_ancestors()] + [self.slug])
if not u.endswith('/') and settings.APPEND_SLASH:
return '%s/' % u
def get_absolute_url(self, read_cache=True, write_cache=True):
if read_cache and self.url_cache:
u = self.url_cache
else:
return u
ancestors = self.get_ancestors()
u = '/'+'/'.join([i.slug for i in ancestors] + [self.slug])
if not u.endswith('/') and settings.APPEND_SLASH:
u = '%s/' % u
if write_cache:
self.url_cache = u
self.save()
return u

@property
def blocks(self):
Expand Down
2 changes: 1 addition & 1 deletion easy_pages/urls.py
Expand Up @@ -4,7 +4,7 @@
active_pages = Page.objects.filter(published=True, page_type='norm')

urlpatterns = patterns('easy_pages.views',
*[('^'+p.get_absolute_url()[1:]+'$',
*[('^'+p.get_absolute_url(read_cache=False)[1:]+'$',
'easy_page',
{'page':p,}
)
Expand Down

0 comments on commit 92349c8

Please sign in to comment.