diff --git a/easy_pages/migrations/0004_auto__add_field_page_url_cache.py b/easy_pages/migrations/0004_auto__add_field_page_url_cache.py new file mode 100644 index 0000000..822bc36 --- /dev/null +++ b/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'] diff --git a/easy_pages/models.py b/easy_pages/models.py index 24b335f..2d7bef0 100644 --- a/easy_pages/models.py +++ b/easy_pages/models.py @@ -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') @@ -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): diff --git a/easy_pages/urls.py b/easy_pages/urls.py index eb86ded..af1207a 100644 --- a/easy_pages/urls.py +++ b/easy_pages/urls.py @@ -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,} )