diff options
author | Dan McGee <dan@archlinux.org> | 2012-12-28 17:12:09 +0100 |
---|---|---|
committer | Dan McGee <dan@archlinux.org> | 2012-12-28 21:48:29 +0100 |
commit | 563a618e697c918c2a76c63a5217047a8d3c1489 (patch) | |
tree | ed3d5a480fc8f8b5df6412130d940de7017ed32f | |
parent | 0c94cc4465530866da7b6437975a287aa7f063a8 (diff) | |
download | archweb-563a618e697c918c2a76c63a5217047a8d3c1489.tar.gz archweb-563a618e697c918c2a76c63a5217047a8d3c1489.tar.xz |
Move slug creation helper to main/utils
Signed-off-by: Dan McGee <dan@archlinux.org>
-rw-r--r-- | main/utils.py | 15 | ||||
-rw-r--r-- | news/views.py | 18 |
2 files changed, 17 insertions, 16 deletions
diff --git a/main/utils.py b/main/utils.py index 17ca386..cdd4ff7 100644 --- a/main/utils.py +++ b/main/utils.py @@ -9,6 +9,7 @@ import hashlib from django.core.cache import cache from django.db import connections, router from django.utils.timezone import now +from django.template.defaultfilters import slugify CACHE_TIMEOUT = 1800 @@ -118,6 +119,20 @@ def set_created_field(sender, **kwargs): obj.last_modified = time +def find_unique_slug(model, title): + '''Attempt to find a unique slug for this model with given title.''' + existing = set(model.objects.values_list( + 'slug', flat=True).order_by().distinct()) + + suffixed = slug = slugify(title) + suffix = 0 + while suffixed in existing: + suffix += 1 + suffixed = "%s-%d" % (slug, suffix) + + return suffixed + + def database_vendor(model, mode='read'): if mode == 'read': database = router.db_for_read(model) diff --git a/news/views.py b/news/views.py index 0e22ac3..62d30fd 100644 --- a/news/views.py +++ b/news/views.py @@ -3,26 +3,12 @@ import markdown from django import forms from django.http import HttpResponse from django.shortcuts import get_object_or_404, redirect -from django.template.defaultfilters import slugify from django.views.decorators.http import require_POST from django.views.generic import (DetailView, ListView, CreateView, UpdateView, DeleteView) from .models import News - - -def find_unique_slug(newsitem): - '''Attempt to find a unique slug for this news item.''' - existing = list(News.objects.values_list( - 'slug', flat=True).order_by().distinct()) - - suffixed = slug = slugify(newsitem.title) - suffix = 0 - while suffixed in existing: - suffix += 1 - suffixed = "%s-%d" % (slug, suffix) - - return suffixed +from main.utils import find_unique_slug class NewsForm(forms.ModelForm): @@ -51,7 +37,7 @@ class NewsCreateView(CreateView): # special logic, we auto-fill the author and slug fields newsitem = form.save(commit=False) newsitem.author = self.request.user - newsitem.slug = find_unique_slug(newsitem) + newsitem.slug = find_unique_slug(News, newsitem.title) newsitem.save() return super(NewsCreateView, self).form_valid(form) |