[snowy] Add slug field, set up urls and views to make it work



commit e5904662505fe990268ed4838769e712abfdc04d
Author: Brad Taylor <brad getcoded net>
Date:   Thu May 14 15:28:00 2009 -0400

    Add slug field, set up urls and views to make it work
---
 notes/admin.py  |    1 +
 notes/models.py |    5 ++++-
 notes/urls.py   |    3 ++-
 notes/views.py  |    7 +++++--
 4 files changed, 12 insertions(+), 4 deletions(-)

diff --git a/notes/admin.py b/notes/admin.py
index d2df5ce..1900fe5 100644
--- a/notes/admin.py
+++ b/notes/admin.py
@@ -22,5 +22,6 @@ from snowy.notes.models import Note
 class NoteAdmin(VersionAdmin):
     list_display = ('created', 'author', 'title')
     search_fields = ['body', 'title']
+    prepopulated_fields = {"slug": ("title",)}
 
 admin.site.register(Note, NoteAdmin)
diff --git a/notes/models.py b/notes/models.py
index 1a595cb..f2c5f16 100644
--- a/notes/models.py
+++ b/notes/models.py
@@ -32,6 +32,7 @@ class Note(models.Model):
     user_modified = models.DateTimeField(auto_now_add=True)
 
     title = models.CharField(max_length=128)
+    slug = models.SlugField(blank=True)
     content = models.TextField(blank=True)
     content_version = models.CharField(max_length=10)
 
@@ -51,7 +52,9 @@ class Note(models.Model):
     @models.permalink
     def get_absolute_url(self):
         return ('note_detail', (), {
-            'note_id': self.id, 'username': self.author.username,
+            'note_id': self.id,
+            'username': self.author.username,
+            'slug': self.slug,
         })
 
 
diff --git a/notes/urls.py b/notes/urls.py
index be3faa6..a31e3dd 100644
--- a/notes/urls.py
+++ b/notes/urls.py
@@ -20,5 +20,6 @@ from snowy.notes.models import Note
 
 urlpatterns = patterns('',
     url(r'^$', 'snowy.notes.views.note_index', name='note_index'),
-    url(r'^(?P<note_id>\d+)/$', 'snowy.notes.views.note_detail', name='note_detail'),
+    url(r'^(?P<note_id>\d+)/$', 'snowy.notes.views.note_detail'),
+    url(r'^(?P<note_id>\d+)/(?P<slug>[\w-]+)/$', 'snowy.notes.views.note_detail', name='note_detail'),
 )
diff --git a/notes/views.py b/notes/views.py
index e1c8314..0b0edee 100644
--- a/notes/views.py
+++ b/notes/views.py
@@ -32,15 +32,18 @@ def note_index(request, username,
     if last_modified.count() > 0:
         return HttpResponseRedirect(last_modified[0].get_absolute_url())
     
-    # Instruction page to tell user to either sync or create a new note
+    # TODO: Instruction page to tell user to either sync or create a new note
     return render_to_response(template_name,
                               {'user': user},
                               context_instance=RequestContext(request))
 
-def note_detail(request, username, note_id,
+def note_detail(request, username, note_id, slug,
                 template_name='notes/note_detail.html'):
     user = get_object_or_404(User, username=username)
     note = get_object_or_404(Note, pk=note_id, author=user)
+
+    if note.slug != slug:
+        return HttpResponseRedirect(note.get_absolute_url())
     
     # break this out into a function
     import libxslt



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]