Как сделать блог на Django 1.8 от начала и до конца (часть 2)

Михаил Попов    31.10.2015 12:16    Модели , Практикум Django     нет комментариев

Добавляем тэги и CKEditorПосле публикации статьи о первой версии блога мне написали в школе, что для редактирования хорошо использовать django-ckeditor. Ну я сразу и пошел к 45 уроку. Потом доделаю то, что пропустил.

Обычно я последователен, но тут не удержался и побежал смотреть, как установить ckeditor на свой блог. Добавить визуальный редактор получилось довольно просто. Теперь он у меня отображается в админке. Заострять на это внимание не буду, т.к. этот урок достаточно подробно отражается в школе spb-tut.ru.
Еще решил добавить теги к статьям и rss-ленту. Подсмотрел видео вот у этого парня: https://youtu.be/7rgph8en0Jc.

Добавил новую модель в models.py:

class Tag(models.Model):
    title = models.CharField(verbose_name="Имя", max_length=200, unique=True)
    slug = models.SlugField(verbose_name='Транслит', max_length=200, unique=True)

    def __unicode__(self):
        return self.title

    def save(self):
        self.slug = slugify(self.title)
        super(Tag, self).save()

В модель Article добавил новое поле типа ManyToManyFields, а также добавил поле для предпросмотра статьи body_short :

class ArticleQuerySet(models.QuerySet): # Используется для выборки только публикуемых статей
    def published(self):
        return self.filter(publish=True)

class Article(Record):
... 
    body_short = RichTextField(verbose_name="Анонс статьи", blank=True)
    tags = models.ManyToManyField(Tag, verbose_name='Тэги')
    objects = ArticleQuerySet.as_manager() # Используется для выборки только опубликованных статей 
    
    def get_absolute_url(self):
        return '/blog/%s' % self.slug
... 

Добавил представление в admin.py:

from django.contrib import admin
from models import Tag

class TagAdmin(admin.ModelAdmin):
    list_display = ('title', 'slug')
    prepopulated_fields = {"slug": ("title",)}

admin.site.register(Tag, TagAdmin)

Все, теперь в статье можно выбирать от одного до нескольких тегов. Указание тега в статье обязательно. Потом теги понадобятся мне для поиска (по крайней мере я так думаю). О, еще добавил, чтобы теги отображались в статье и в списке статей, для этого изменил шаблоны all_articles.html и one_article.html. Добавил в строку с автором и датой дополнение:

<small>Автор: <ins>Михаил Попов</ins> / Дата: <ins>{{ art.add_date|date:"d.m.Y" }}</ins> в <ins>{{ art.add_date|time:"H:i" }}</ins> / Тэги: <ins>{{ art.tags.all|join:", " }}</ins></small>

Теперь про RSS-фид. Создать в проекте новый файл feed.py:

# coding: utf-8
from django.contrib.syndication.views import Feed
from blog.models import Article

class LatestPosts(Feed):
    title = "Блог Михаила Попова"
    link = "/feed/"
    description = 'Выполнение практикума по курсу Python + Django + Продажи'

    def items(self):
        return Article.objects.published()[:5]

Из файла видно, что для выборки объектов используется новый метод published(). Этот метод я определил выше в модуле models.py в классе ArticleQuerySet и назначил его в качестве менеджера в модели Article. Осталось добавить ссылку на фид в urls.py проекта:

# coding: utf-8
...
from blog import feed
...

urlpatterns = [
    ...
    url(r'^feed/$', feed.LatestPosts(), name="feed"),
    ...
]

Ну вот, теперь мой блог вполне заслуживает название блога, а не полублога.

В следующей статье мы посмотрим, как можно добавить лайки в блог.

Начал изучать Python и Django Как сделать блог на Django 1.8 от начала и до конца

0     0

blog comments powered by Disqus