Добро пожаловать в документацию 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
Страницы¶
Это модуль статичных страниц.
Поля модели страницы¶
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: Язык по умолчанию
Контакты¶
Модуль для добавление контактной информации.



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¶
Поля¶
Поля модели меню¶
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
Соц. сети¶
Модуль для добавления ссылок на социальные сети.

Поля модели социальных сетей¶
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 %}