Как сделать блог на Django 1.8 от начала и до конца (часть 2)
Михаил Попов 31.10.2015 12:16 Python , Модели , Практикум Django нет комментариевПосле публикации статьи о первой версии блога мне написали в школе, что для редактирования хорошо использовать 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 |