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

категория: Django
Модели для категорий и тегов мы уже создали, теперь будем создавать для них представления и шаблоны. Кстати, автоматически PK присваивается id, и по этому я буду связывать модели именно через id. Первым делом создадим для них ссылки, заходим в urls.py:
urlpatterns = patterns('blog.views',
    # выборку будем делать по id, представление - category
    url(r'^category/(?P<id>\d+)$', 'category'), 
    url(r'^tag/(?P<id>\d+)/$', 'tag'), # тут тоже самое
)
Далее создаем сами представления в views.py:
from blog.models import Post, Category, Tag # импортируем наши модели
from django.shortcuts import render
def category(request, id): # получаем аргумент id
    # делаем выборку выбранной категории
    category = Category.objects.select_related().get(id=id) 
    # выбираем все статьи по выбранной категории
    posts = category.post_set.all() 
    # возвращаем выбранную категорию и статьи в шаблон category.html
    return render(request, 'tagpage.html', {'posts': posts, 
                                            'category': category})
def tag (request, id): # тут все тоже самое
    tag = Tag.objects.select_related().get(id=id)
    posts = tag.post_set.all()
    return render(request, 'tagpage.html', {'posts': posts, 'tag': tag})
Далее создаем шаблоны для наших представлений category.html, tagpage.html в папке tamplates: Создаем category.html:
{% extends "base.html" %} // главный шаблон
/* имя нашей вобранной категории */
{% block title %}Статьи в категории - {{ category.name }}{% endblock title %} 
{% block content %}
    /* выводим нашу выбранную категорию */
    <h2>Статьи в категории - {{ category.name }}:</h2>
    	{% for post in posts %} # делаем цикличную выборку наших статей
            /* выводим список ссылок на статьи из выбранной категории */
        	<p><a href="/blog/{{ post.id }}">{{ post.title }}</a></p>
    	{% endfor %}
{% endblock content %}
Для tagpage.html все делаем аналогично. Я так долго мучался, а, как оказалось, всего пару предложений)). Еще, я заметил одну штуку, что так как у меня PK - id, то в адресной строке браузера будут числа, а хотелось бы, чтоб там были названия постов. Так что к этой теме еще вернусь.


blog comments powered by Disqus