Добро пожаловать в документацию OMS CMS!

OMS - это CMS с открытым исходным кодом, основанная на фреймворке Django, разработанная для гибкости. Что позволяет вам без проблем расширить ее функционал. Данная cms позволяет сделать сайт за считанные минуту. Вы можете использовать базовый шаблон или скачать с официального сайта.

Установка

  • Создать виртуальное окружение

    python -m venv venv
    
  • Активировать виртуальное окружение

  • Установить CMS

    pip install oms-cms
    
  • Создать проект

    oms-start
    

Разработка

  • Сделать форк или клонировать репозиторий
  • Создать файл oms_cms/config/local_settings.py и прописать конект к базе
import os
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))

# SECURITY WARNING: keep the secret key used in production secret!
SECRET_KEY = 'b0!c@b!o_#Fdsf4#%#regdh@ana6l2$n=!p1ejm@'

DEBUG = True

ALLOWED_HOSTS = ["127.0.0.1", "localhost"]

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql_psycopg2',
        'NAME': 'DB',
        'USER': 'user',
        'PASSWORD': 'pass',
        'HOST': 'localhost',
        'PORT': '5432',
    }
}


STATIC_DIR = os.path.join(BASE_DIR, 'static')
STATIC_URL = '/static/'
STATICFILES_DIRS = [os.path.join(BASE_DIR, 'static'), ]
  • Установить зависимости

    pip install -r req.txt
    
  • Создание БД и настройка CMS

    python manage.py deployOMS
    
  • Запустить dev сервер

    python manage.py runserver
    

Команды

Запуск установщика

oms-start

Создание файлов миграций

python manage.py makemigrations

Применение миграций

python manage.py migrate

Создание супер пользователя

python manage.py createsuperuser

Создание БД и настройка CMS

python manage.py deployMin

Создание БД и настройка CMS с демо данными

python manage.py deployOMS

Страницы

Это модуль статичных страниц.

Вывода страницы

Имя шаблона
pages/index.html
{{ page.title }}
{{ page.text|safe }}

Поля модели страницы

title:Заголовок
text:Текст
edit_date:Дата редактирования
published_date:Дата публикации
published:Опубликовать или снять с публикации
template:Шаблон
slug:url

Template tags

get_block_page

Вернет словарь с блоками страницы

{% load pages_tags %}
{% get_block_page page as blockpage %}

<h2>{{ blockpage.about.title }}</h2>
<h3>{{ blockpage.about.sub_title }}</h3>
<p>{{ blockpage.about.description|safe }}</p>

about - имя блока

page - объект страницы

get_list_block_page

Вывод списка блоков страниц

{% load pages_tags %}
{% get_list_block_page page as blockpage %}
{% for block in blockpage %}
     <div>
         <h2>{{ blockpage.about.title }}</h2>
         <h3>{{ blockpage.about.sub_title }}</h3>
         <p>{{ blockpage.about.description|safe }}</p>
     </div>
{% endfor %}

about - имя блока

page - объект страницы

Новости/Блог

Это модуль для ведение блога.

Категории

Template tags

Подключение тега. Если не указать шаблон, то будет взят по умолчанию.

{% load news_tags %}

{% category_list %}

Изменение шаблона

{% category_list template="categories.html" %}

Шаблон для вывода списка категорий.

<ul>
    {% for category in category_list %}
        <li>
            <a href="{{ category.get_absolute_url }}">{{ category.name }}</a>
        </li>
    {% endfor %}
</ul>

Вывод списка всех категорий без использования шаблона.

{% load mptt_tags news_tags %}
<ul>
    {% for_category_list as categories %}
    {% recursetree categories %}
        <li>
            <a href="{{ node.get_absolute_url }}">{{ node.name }}</a>
            {% if not node.is_leaf_node %}
                <ul class="children">
                    {{ children }}
                </ul>
            {% endif %}
        </li>
    {% endrecursetree %}
</ul>

Поля модели категории

name:Название
lang:Язык
parent (related_name=“children“):
 Родительская категория
template (default=“news/post_list.html“):
 Шаблон
slug:url
published:Опубликовать или снять с публикации
paginated (default=5):
 Количество новостей на странице

Статьи/новости

Вывод списка статей

Имя шаблона
news/post_list.html
{% for post in post_list %}
    {% if post.image %}
        <img src="{{ post.image.url }}">
    {% endif %}
    <p>{{ post.published_date }}</p>
    <p>
        {{ post.title }}
    </p>
{% endfor %}

Вывод полной статьи

Имя шаблона
news/post_detail.html
<h1>{{ post.title }}</h1>
{% if post.author %}
    <p>{{ post.author }}</p>
{% endif %}
<p>Опубликовано {{ post.created_date }}</p>
{% if post.image %}
    <img src="{{ post.image.url }}" alt="{{ post.title }}">
{% endif %}
{{ post.text|safe }}
Просмотренно - {{ post.viewed }}

Поля модели статей

author:Автор (FK)
title:Заголовок
subtitle:Под заголовок
mini_text:Краткое содержание статьи
text:Полное содержание статьи
created_date:Дата создания
edit_date:Дата редактирования
published_date:Дата публикации - когда будет опубликованно
image:«Главная фотография»
tag:Теги (M2M)
category:Категория (FK)
template:Шаблон
slug:url
published:Опубликовать или снять с публикации
viewed:Просмотров
status:Отображать для зарегистрированных пользователей или нет

Template tags

Подключение тега. Если не указать шаблон, то будет взят по умолчанию.

{% load news_tags %}

{% post_list %}

Изменение шаблона

{% post_list template="news_block_tags.html" %}

Шаблон для вывода списка статей.

{% for post in post_list %}
    <h2><a href="{{ post.get_absolute_url }}"> {{ post.title }} </a></h2>
    {% if post.image %}
        <img src="{{ post.image.url }}">
    {% endif %}
    <p>{{ post.mini_text|safe }}</p>
    <p>{{ post.published_date }}</p>
{% endfor %}

for_post_list

Вывод списка статей без использования шаблона.

{% for_post_list as post_list %}
{% for post in post_list %}
    <div>
        <h2><a href="{{ post.get_absolute_url }}">{{ post.title }}</a></h2>
        {% if post.image %}
            <img src="{{ post.image.url }}">
        {% endif %}
        <p>{{ post.mini_text|safe }}</p>
    </div>
{% endfor %}

Теги

for_tags_list

Вывод списка всег тегов статей.

{% load news_tags %}
<ul>
    {% for_tags_list as tags %}
    {% for tag in tags %}
        <li><a href="{{ tag.get_absolute_url }}">{{ tag.name }}</a></li>
    {% endfor %}
</ul>

Поля модели тегов

name:Имя
slug:url
published:Опубликовать или снять с публикации

Комментарии

Поля модели комментариев

user ForeignKey:
 Связь с моделью Пользователей
post ForeignKey:
 Связь с моделью Новость
text (max_length=2000):
 Сообщение
date:Дата
update:Изменен
parent TreeForeignKey(related_name=“children“):
 Родительский комментарий
published:Опубликовать или снять с публикации

Языки / Мультиязычность

Модуль для создания мультиязычного сайта.

Определить язык который выбрал пользователь можно забрав его из:

request.session["lang"]

Template tags

Подключение тега. Если не указать шаблон, то будет взят по умолчанию.

{% load lang_tags %}

{% list_lang %}

Изменение шаблона

{% list_lang template="lang.html" %}

Шаблон для выбора языков.

{% for lang in languages %}
    <ul>
        <li>
            <a href="{{ lang.get_absolute_url }}">{{ lang.name }}</a>
        </li>
    </ul>
{% endfor %}

Поля модели языков

name:Название, отображается на сайте
slug:Сокращение названия, Пример: «ru»
is_default:Язык по умолчанию

Контакты

Модуль для добавление контактной информации.

_images/contact.png _images/contact_fields.png _images/contact_soc.png

Template tags

Подключение тега. Если не указать шаблон, то будет взят по умолчанию. Если не указан name будут выбраны все записи контактов.

{% load contact_tags %}

{% contact %}

Изменение шаблона

{% contact name='Контакты' template='base/tags/contact/contact_block_tag.html' %}

Шаблон для вывода полей контактов и соц. сетей.

<p>{{ contact.name }}</p>
'''Поля контактов'''
{% for field in contact.get_contact_fields %}
    <p>
        {% if field.icon_ui %}
                '''Иконка'''
            <span class="{{ field.icon_ui }}"></span>
        {% elif field.icon %}
                '''Загруженая иконка'''
            <img src="{{ field.icon.image.url }}">
        {% endif %}
            '''Поле 1'''
        {{ field.text|safe }}
            '''Поле 2'''
        {{ field.text_two|safe }}
    </p>
{% endfor %}
'''Соц. ссылки'''
{% for link_soc in contact.get_contact_socnet %}
    <p>
        <a href="{{ link_soc.get_link_contact_soc }}">
            {% if link_soc.link.icon_ui %}
                    '''Иконка'''
                <span class="{{ link_soc.link.icon_ui }}"></span>
            {% elif link_soc.link.icon %}
                    '''Загруженая иконка'''
                <img src="{{ link_soc.link.icon.image.url }}">
            {% else %}
                   ''' Название, если нет иконок'''
                {{ link_soc.link }}
            {% endif %}
        </a>
    </p>
{% endfor %}

for_contact

Вывод полей контактов и соц. сетей.

{% for_contact name='Footer' as contact %}
<p>{{ contact.name }}</p>
    '''Поля контактов'''
{% for field in contact.get_contact_fields %}
    <p>
        {% if field.icon_ui %}
                '''Иконка'''
            <span class="{{ field.icon_ui }}"></span>
        {% elif field.icon %}
                '''Загруженая иконка'''
            <img src="{{ field.icon.image.url }}">
        {% endif %}
            '''Поле 1'''
        {{ field.text|safe }}
            '''Поле 2'''
        {{ field.text_two|safe }}
    </p>
{% endfor %}
'''Соц. ссылки'''
{% for link_soc in contact.get_contact_socnet %}
    <a href="{{ link_soc.get_link_contact_soc }}">
        {% if link_soc.link.icon_ui %}
            <span class="{{ link_soc.link.icon_ui }}"></span>
        {% elif link_soc.link.icon %}
            <img src="{{ link_soc.link.icon.image.url }}">
        {% else %}
            {{ link_soc.link }}
        {% endif %}
    </a>
{% endfor %}

Генерация формы обратной связи:

В теге {% gen_form %} укажите поля которые хоите рендерить. Если не указвать поля, отредерятся все.

Для редиректа после отправки формы вставьте скрытое поле <input name=»next» hidden value=»адрес редиректа»>

Для защиты от спама используйте поле <input name=»honeypot» hidden value=»»> Форма включает поле «honeypot». Это ловушка: если в это поле будут введены какие-либо данные, форма будет считаться спамом (спаммеры часто автоматически заполняют все поля, пытаясь сделать правильные представления).

 <form action="{% url 'contact:feedback_gen' %}" method="post">
     {% csrf_token %}
     {% gen_form "full_name" "phone" as form %}
     {{ form }}
     <input name="next" hidden value="{{request.path}}">
     <input name="honeypot" hidden value="">
     <input type="submit" name="" value="Submit" />
</form>

Поля

Поля модели контактов

name (max_length=100):
 Название
description (max_length=5000):
 Описание
map = (max_length=10000):
 Карта
slug (max_length=100, unique=True):
 URL

Поля контактов

text (max_length=1000):
 Поле 1
text_two (max_length=1000):
 Поле 2
icon_ui (max_length=500):
 Класс иконки
icon (upload_to=»icon/»):
 Иконка
contact ForeignKey:
 Связь с моделью Контакты

Поля соц. сети контактов

contact_soc (ForeignKey):
 Связь с моделью Контакты
your_id (max_length=100):
 Ваша ссылка
link (ForeignKey):
 Связь с моделью Соц. сеть

Поля формы обратной связи

full_name = CharField(max_length=100):
 ФИО
email = EmailField(max_length=150):
 Почта
phone = CharField(max_length=14):
 Телефон
subject = CharField(max_length=150):
 Тема
message = TextField(max_length=1000):
 Сообщение
date = DateTimeField(auto_now_add=True):
 Дата

Меню

Модуль для создания меню сайта из админ панели.

Template tags

for_menu_item

Вывод списка пункот меню.

{% for_menu_item menu="Footer" as items %}
    <ul>
        {% for item in items %}
            <li>
                {% if item.url %}
                    <a href="{{ item.url }}">{{ item.title }}</a>
                {% elif item.anchor %}
                    <a href="{{ item.get_anchor }}">{{ item.title }}</a>
                {% else %}
                    <a href="{{ item.content_object.get_absolute_url }}">{{ item.title }}</a>
                {% endif %}
            </li>
        {% endfor %}
    </ul>

Поля

Поля модели меню

name (max_length=255):
 Название
status:Отображать только для зарегистрированных

Поля модели пунктов меню

title (max_length=255):
 Название пункта меню на сайте
name (max_length=255):
 Название латиницей
parent (related_name=“children“):
 Родительский пункт
menu:Связь с моделью Меню
status:Отображать только для зарегистрированных
url:url на внешний ресурс
anchor:Якорь
content_type:Ссылка на любую модель
object_id:id записи из выбраной модель
content_object:content_object

Соц. сети

Модуль для добавления ссылок на социальные сети.

_images/soc_networks.png

Поля модели социальных сетей

title:Название
icon_ui:Класс иконки
icon (upload_to=»soc_icon/»):
 Иконка
link:URL cоц. сети

Партнеры

Модуль для добавления ссылок на партнеров.

Template tags

Вывод списка всех партнеров

{% load partners_tags %}

{% all_partners as partners %}
{% for partner in partners %}
    <a href="{{ partner.link }}">
        {% if partner.picture %}
            <img src="{{ partner.picture.url }}">
        {% endif %}
    </a>
{% endfor %}

Галерея и фотографии

Модуль для создания галерей и вывода фотографий

Template tags

Список галерей

Аргрументы для вывода галлереи:

name=имя галереи или pk=id галереи, без указания аргументов выведет все галереи.

{% load gallery_tags %}

{% for_gallery as gallery%}

Список фотографий

Аргрументы для вывода фотографий:

gallery=None, без указания аргументов выведет все фото.

{% load gallery_tags %}

{% for_photo gallery="Test" as photos %}
 {% for photo in photos %}
     <img src="{{ photo.image.url }}">
 {% endfor %}

Одна фотография

Аргрументы для вывода одной фотографии:

name=имя фото или pk=id фото, без указания аргументов вернет None.

{% load gallery_tags %}

{% get_photo name="My photo" as photos %}

Версии

0.5.7

  • «news» URL removed

0.5.6

  • When creating article categories and articles, the uniqueness of two fields is now taken into account: language and slug

0.5.5

Added translation into English for the admin panel