Категории и теги для блога Django 1.4

категория: Django
Описание основ создания своего блога - я упущу, там особо сложного ничего не было, и все хорошо описано в других источниках. Начну с создания категорий и тегов. Для своего блога я решил сделать, как и у всех, категории - чтобы разделять тематику статей и для быстрого доступа к той или иной информационной ветке и, естественно, теги (ключевые слова), которые будут связывать информацию из разных категорий, и их страшно любят поисковики)). Если логически подумать, мне потребуется две модели отношений (https://docs.djangoproject.com/en/1.4/ref/models/fields/): - к одной категории будут относиться много статей, а к многим статьям только одна категория - многие-к-одному:
class ForeignKey(othermodel[, **options])
- к одному тегу будут относиться много статей, но и к одной статье будут относиться много тегов - многие-ко-многим:
class ManyToManyField(othermodel[, **options])
Итак, создаем модель Category в нашем models.py:
class Category(models.Model):
    name = models.CharField(max_length=100)
    def __unicode__(self):
        return self.name
Далее добавляем поле в модель для статей Post, которре будет ссылаться на модель Category:
category = models.ForeignKey(Category)
Переходим к тегам. Создаем модель Tag:
class Tag(models.Model):
	name = models.CharField(max_length=50)
	def __unicode__(self):
		return self.name
Дальше добавляем поле в модель для статей Post, которое будет ссылаться на модель Tag:
tag = models.ManyToManyField(Tag)
Все! с моделями закончили, и как оказалось, - все очень просто)) Теперь не забываем зарегистрировать модели в админку admin.py (у кого нет админки пропускаем этот пункт):
from django.contrib import admin 
from blog.models import Tag, Category
admin.site.register(Tag)
admin.site.register(Category)
И еще, не забываем, если у вас база уже наполнена информацией, сделать миграцию базы данных. Теперь наполняем наши статьи категориями и тегами. Дальше их нужно вывести из базы данных в наш блог, собственно говоря, на экран. Заходим в наш шаблон для блога blog.html и вписываем выборку наших категорий и ключевых слов:
{% block content %} /*блок с нашим контентом*/
    /*циклично выбираем все данные из модели post для всех наших статей*/
    {% for post in object_list %} 
        /*тут название статьи*/
        /*выводим категорию*/
        <h3>категория: <a href="category/{{ post.category }}">
                                        {{ post.category}}</a><h3>
	/*тут текст нашей статьи*/
	<div class="tags">ключевые слова:
	{% for tag in post.tag.all %} /*делаем проход по нашим тегам*/
		<a href="tag/{{ tag }}">{{ tag }}</a> /*выводим их на экран*/
                /*ставим между тегами запятые*/
		{% if not forloop.last %}, {% endif %}
	{% endfor %}
	</div>
    {% endfor %}
{% endblock content %}
Теперь можно насладиться своим детищем, а дальше будем создавать отдельные страницы для вывода статей отдельно по категории и отдельно по тегу.


blog comments powered by Disqus