django-sitecats
Django-приложение для категоризации.
Репозиторий: https://github.com/idlesign/django-sitecats
Автор:
Игорь Стариков
Для тех, кто считает, что подход с использованием меток страдает недостатком стуктурирования. Приложение служит для структурирования данных: создайте иерархию категорий и привязывайте к этим категориям сущности вашего сайта.
В шаблоне нам нужно будет использовать шаблонный тег
За более подробным описанием и примерами обратитесь к документации (англ.).
Смотрите также:
# Где-то вviews.py
from django.shortcuts import render, get_object_or_404
# Допустим модель Article унаследована от примеси sitecats.models.ModelWithCategory.
from .models import Article
def article_details(self, request, article_id):
"""Как видите, в этом представлении нет ничего выдающегося.
Однако оно отрисует для нас страницу с категориями статьи.
"""
return self.render(request, 'article.html', {'article': get_object_or_404(Article, pk=article_id)})
def article_edit(self, request, article_id):
"""Это представление мы обучим отрисовке редактора
категорий и обработке запросов от него.
"""
article = get_object_or_404(Article, pk=article_id)
# Включаем редактор для статьи, позволяем пользователю
# добавлять свои подкатегории в категории language и os
# (допустим сы уже создали их через админку Django),
# и привязывать кподкатегориям статью.
article.enable_category_lists_editor(
request,
editor_init_kwargs={'allow_new': True},
additional_parents_aliases=['language', 'os']
)
form = ... # Далее обычная обработка редактирования Article.
return render(request, 'article.html', {'article': article, 'form': form})
В шаблоне нам нужно будет использовать шаблонный тег
sitecats_categories
. Для простоты демонстрации используем один шаблон для обоих представлений.На заметку
Дополнительная функциональность (например, отрисовка облака категорий и улучшенный редактор) потребуют включения JS
sitecats.min.js
. {% extends "base.html" %}
{% load sitecats %}
{% block contents %}
<script src="{{ STATIC_URL }}js/sitecats/sitecats.min.js">< /script>
<h1>{{ article.title }}< /h1>
<div id="article_categories">
{% sitecats_categories from article %}
< /div>
Далее идёт код формы редактирования.
{% endblock %}
За более подробным описанием и примерами обратитесь к документации (англ.).
Смотрите также: