Django: как сформировать уникальный URL для новости?

Изучаю Django. В общем задача типовая, но пока дельные варианты в голову не идут. Есть сайт, на нем есть новости, нужно как-то формировать уникальный URL для каждой из них. Предположительно это можно сделать на основе даты + ещё какого-то уникального идентификатора, но никак не решу как это должно работать: формировать URL как-то с помощью системы шаблонов, или же хранить для каждой новости в базе свой URL, и подставлять его в шаблон. Также всё ещё не решил как обеспечить эту самую «уникальность».

Кто нибудь подскажет нормальное решение — реализацию задачи? Ну или опять же мб где-то можно взять исходники какого нибудь блога на Django чтобы покопаться?
  • Вопрос задан
  • 6359 просмотров
Решения вопроса 1
3ds
@3ds
я сделал так (к новости обращаемся 20120221-1 — дата-id):
url.py —
url(r'^news/(?P(\d){8})?(\-)?(?P(\d)+)?$', news_views.show_news, name="news-url"),
models.py:
class News(models.Model):
...........
def get_absolute_url(self):
return "/news/%s" % (self.news_date.strftime('%Y%m%d') + '-' + str(self.id))

template.html:
{{ news.title }}
Ответ написан
Пригласить эксперта
Ответы на вопрос 5
jov
@jov
Если нравится ЧПУ и идея breadcrumbs, то предпочтительней схема /year/month/day/id-slug? для DetailView. Пользователь всегда может посмотреть новости за определённый период, ListView, просто модифицировав url в строке браузера, вполне логичным способом.
Ответ написан
Комментировать
EvoTech
@EvoTech
Насколько я понял, вас интересует вопрос, что slug на основе заголовка может быть не уникален и его нужно суффиксировать (если он в базе уже есть). Первое, что попалось под руку — bitbucket.org/neithere/django-autoslug

А вообще, — www.google.com/search?hl=ru&q=django+autoslug
Ответ написан
Комментировать
@odmin4eg
У меня примерно вот так

class Post(models.Model):
    title = models.CharField(max_length=64, verbose_name='Заголовок поста')
    uid = models.CharField(max_length=64, unique=True, blank=True, verbose_name='Url')
...........
    def get_absolute_url(self):
        return '/blog/post/%s.html' % self.uid

    def save(self, *args, **kwargs):
        if not self.uid:
            lastid = Post.objects.latest('id')
            self.uid = str(lastid.id + 1 ) +'-'+ createUid(self.title)
        super(Post, self).save(*args, **kwargs)


в файле functions.py
import trans

def createUid(uid):
	return uid.encode('trans').replace(' ', '_').lower();


Урла получается вот такой
/blog/post/149-eroticheskie_gifki.html
Ответ написан
Комментировать
k12th
@k12th
console.log(`You're pulling my leg, right?`);
Model.SlugField, django.template.defaultfilters.slugify
Ответ написан
Комментировать
crackedmind
@crackedmind
web-developer
Я просто генерировал uuid
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы