GithubHelp home page GithubHelp logo

spicycms / spicy.categories Goto Github PK

View Code? Open in Web Editor NEW
0.0 9.0 0.0 161 KB

Django module for clean data-objects categorization in your SpicyCMS edition

Home Page: http://spicycms.com

Python 95.12% HTML 4.88%
django-application categories categorize cms-module cms-extension

spicy.categories's Introduction

spicy.categories

Приложение Django для проекта SpicyCMS. Использует концепцию реиспользования кода и конфигурации spicy.core.

Это простое приложение использует по умолчанию типовые шаблоны и часть логики spicy.core.admin. Вы можете путем конфигурации settings.py и наследования spicy.categories.abs.AbstractCategory, создать собственную модель категорий и добавить логику к вашему приложению. Все доступные настройки по умолчанию находятся в defaults.py.

Назначение

Категории сделаны для того, чтобы редактор сайта, мог группировать данные. Быстро искать в панели адимнистратора и дать задачу разработчику на вывод данных по категории в любом шаблоне сайта. Без повторного производства логики кода такого базового приложения.

Подключаем категорию к вашему Django приложению

Настраиваем Django приложение settings.py

INSTALLED_APPS = (
...
'spicy.categories',
...

)

Подключаем категорию к вашей модели данных

# yourapp.models.py
from django.db import models

class YourModel(models.Model):
# other fields
category = models.ForeignKey('Category', blank=True, null=True, on_delete=models.SET_NULL, verbose_name=_('Category'))

Для использования шаблонных тегов подключите их в начале файла:

{% import categories %}

Выводим в шаблоне сайта модели по заданной категории, по slug:

{% category "slug" "app" "model" 10 %}
    This is {{ doc.title }} document!
{% endcategory %}

Выводим в шаблоне сайта модели по заданной категории, по slug, с пажинацией по 10 объектов на странице:

{% category "slug" 10 paginate as doc %}
    This is {{ doc.title }} document!
{% endcategory %}

Фильтрация объектов в шаблоне (реализованы только простые запросы):

{% category "slug" "app" "model" all 10 where owner__is_banned=True %}
    Document {{ doc }} from a user that isn't banned. Parameter "all" disables default filtering.
{% endcategory %}

Сортировка объектов (возможна по нескольким полям), с ключевым словом sorted:

{% category "slug" "app" "model" sorted title -pub_date %}
    Document {{ doc }} sorted by title field ascending and pub_date field descending.
{% endcategory %}

Делаем свою модель категорий

Модуль содержит базовый абстрактный класс для Категории, который может быть расширен для конкретной сборки приложения. Поддерживает работу с несколькими сайтами посредством django sites framework.

Для использования объектов категорий по умолчанию предоставляется класс spicy.categories.models.Category. Вы можете использовать свой класс, для этого необходимо указать в settings.py:

USE_DEFAULT_CATEGORY = False
CUSTOM_CATEGORY_MODEL = 'yourapp.models.CustomCategory'

Ваш класс должен наследоваться от spicy.categories.abs.AbstractCategory, также нужно указать Meta.abstract = False, чтобы Django создала таблицу для кастомных категорий.

# yourapp.models.py
from django.db import models
from spicy.categories.abs import AbstractCategory

class CustomCategory(AbstractCategory):
    new_field = models.IntegerField('New field', null=True, blank=True)

    @models.permalink
    def get_absolute_url(self):
        return 'webapp:public:category', None, {'slug': self.slug}

    class Meta:
        abstract = False

По умолчанию для работы с категориями через админку и сайт используется форма forms.CategoryForm. Вам нужно изменить это поведение, указав в setting.py:

    CREATE_CATEGORY_FORM = 'yourapp.forms.CustomCreateCategoryForm'
    EDIT_CATEGORY_FORM = 'yourapp.forms.CustomEditCategoryForm'

Добавить новую форму, в которой объявлено поле new_field:

    # yourapp.forms.py
    from django.conf import settings
    from spicy.utils import get_custom_model_class
    CustomCategory = get_custom_model_class(settings.CUSTOM_CATEGORY_MODEL)

    class CategoryForm(forms.ModelForm):
        class Meta:
            model = CustomCategory
            fields = 'title', 'slug', 'order_lv', 'site', 'new_field'

Настройки индивидуальной панели администрирования для категорий

По умолчанию, как и в Django приложении, все модели автоматически дсотупны для редактирования в панели администрирования, но концепция SpicyCMS, предполагает разработку интерфейсов под нужды оператора, чтобы ускорить и упросить его работу. Сделать индивидуальный интерфейс.

Для индивидуального редактирования новых полей вашей модели в админке, нужно создать копии шаблонов templates/spicy.category/admin/edit.html и templates/spicy.category/admin/create.html в своем проекте темы сайта или приложения:

...
{% block content %}
    {# standard fields #}
    {% formfield "" form "new_field" "li-select" %}
    ...
{% endblock %}
...

Таким образом, вы можете использовать разные формы для редактирования и создания категории в панели админстратора или добавить инструкции для редакторов прямо в шаблоны вашего проекта. ( читайте подробнее про Spicy Admin panel)

Поддержка проекта

По вопросам сотрудничества, предложений по улучшению кода, обращайтесь в наши каналы разработчиков:

Для примеров коммерческих проектов на SpicyCMS, вы можете обратиться к нашим студиям-партнерам через сайт

https://bramabrama.com и почту [email protected]

spicy.categories's People

Contributors

antisvin avatar burus avatar dariaplotnikova avatar jesseyv avatar megabogus avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.