Проект

Общее

Профиль

Wiki » История » Версия 2

Dmitry Chernyak, 17.02.2021 17:02

1 1 Dmitry Chernyak
h1. Django-gentelella
2 1 Dmitry Chernyak
3 1 Dmitry Chernyak
*Django Gentelella* - это интерфейс для применения темы Gentelella https://colorlib.com/polygon/gentelella/ на проекты, написанные на основе фреймворка Django. Данный интерфейс состоит из собственных форм, базовых шаблонов страниц, к которым применена тема Gentelella, а также содержит набор кастомных элементов страниц (таблицы, модальные формы, элементы рендера и прочее).
4 1 Dmitry Chernyak
5 1 Dmitry Chernyak
h2. Установка
6 1 Dmitry Chernyak
7 1 Dmitry Chernyak
Для установки пакета необходимо склонировать репозиторий в директорию проекта
8 1 Dmitry Chernyak
9 1 Dmitry Chernyak
<pre>
10 2 Dmitry Chernyak
git clone git://dev.skycover.ru:/django_gentelella.git
11 1 Dmitry Chernyak
</pre>
12 1 Dmitry Chernyak
13 1 Dmitry Chernyak
добавить django_gentelella в список установленных приложений в @settings.py@
14 1 Dmitry Chernyak
15 1 Dmitry Chernyak
<pre>
16 1 Dmitry Chernyak
<...>
17 1 Dmitry Chernyak
INSTALLED_APPS = [
18 1 Dmitry Chernyak
    'django.contrib.admin',
19 1 Dmitry Chernyak
    <...>,
20 1 Dmitry Chernyak
    'django_gentelella',
21 1 Dmitry Chernyak
]
22 1 Dmitry Chernyak
<...>
23 1 Dmitry Chernyak
</pre>
24 1 Dmitry Chernyak
25 1 Dmitry Chernyak
h2. Использование
26 1 Dmitry Chernyak
27 1 Dmitry Chernyak
Для использования темы Gentelella в шаблонах следует встраивать их в базовый:
28 1 Dmitry Chernyak
29 1 Dmitry Chernyak
<pre>
30 1 Dmitry Chernyak
{% extends 'django_gentelella/templates/base.html' %}
31 1 Dmitry Chernyak
</pre>
32 1 Dmitry Chernyak
33 1 Dmitry Chernyak
Для использования компонентов необходимо импортировать django_gentelella в шаблон:
34 1 Dmitry Chernyak
35 1 Dmitry Chernyak
<pre>
36 1 Dmitry Chernyak
{% load django_gentelella %}
37 1 Dmitry Chernyak
</pre>
38 1 Dmitry Chernyak
39 1 Dmitry Chernyak
h2. Компоненты
40 1 Dmitry Chernyak
41 1 Dmitry Chernyak
h3. Модели
42 1 Dmitry Chernyak
43 1 Dmitry Chernyak
*IntervalField* — поле для хранения интервалов дат в форме количества секунд. Наследуется от BigInt, в качестве аргументов может принимать verbose_name, минимальное и максимальное значение, формат.
44 1 Dmitry Chernyak
45 1 Dmitry Chernyak
h3. Формы
46 1 Dmitry Chernyak
47 1 Dmitry Chernyak
*ModelForm* - заменяет используемые поля форм Django на соответствующие поля Django Gentelella
48 1 Dmitry Chernyak
*Form* - оформляет используемые поля как form-control
49 1 Dmitry Chernyak
*ROFormMixin* - миксин для установки статуса Read Only для полей. В качестве аргументов получает:
50 1 Dmitry Chernyak
## *read_only* - список полей для установки на них статуса
51 1 Dmitry Chernyak
## *read_only_exclude* - список полей, для которых статус устанавливать не надо (в случае, если read_only == '__all__')
52 1 Dmitry Chernyak
53 1 Dmitry Chernyak
*IntervalFormField* - поле для указания интервала времени в определённое количество часов, минут и секунд.
54 1 Dmitry Chernyak
*IntervalWidget* - виджет для поля указания интервала.
55 1 Dmitry Chernyak
!intfield.png!
56 1 Dmitry Chernyak
57 1 Dmitry Chernyak
*Select2* - виджет для оформления полей выбора элемента из множества.
58 1 Dmitry Chernyak
!chfield.png!
59 1 Dmitry Chernyak
60 1 Dmitry Chernyak
*Select2Multiple* - виджет для оформления полей множественного выбора.
61 1 Dmitry Chernyak
!multiselect.png!
62 1 Dmitry Chernyak
63 1 Dmitry Chernyak
*CheckBox* - виджет для оформления поля выбора как группы кнопок.
64 1 Dmitry Chernyak
!check.png!
65 1 Dmitry Chernyak
66 1 Dmitry Chernyak
Также предоставлены собственные замены для стандартных виджетов:
67 1 Dmitry Chernyak
68 1 Dmitry Chernyak
|_. Виджет Django |_. Виджет DG |
69 1 Dmitry Chernyak
| NumberInput | IntegerInput |
70 1 Dmitry Chernyak
| TextInput | TextInput |
71 1 Dmitry Chernyak
| Textarea | TextArea |
72 1 Dmitry Chernyak
| Select | Select2 |
73 1 Dmitry Chernyak
| SelectMultiple | Select2Multiple |
74 1 Dmitry Chernyak
| DateTimeInput | DateTime |
75 1 Dmitry Chernyak
| DateInput | Date |
76 1 Dmitry Chernyak
| TimeInput | TimeInput |
77 1 Dmitry Chernyak
| CheckboxInput | SwitheryInput |
78 1 Dmitry Chernyak
79 1 Dmitry Chernyak
*Пример использования компонентов Django Gentelella в формах*
80 1 Dmitry Chernyak
81 1 Dmitry Chernyak
<pre>
82 1 Dmitry Chernyak
from django import forms
83 1 Dmitry Chernyak
from django_gentelella.forms import Select2, Select2Multiple, Form, DateTimeRangeField, DateTimeRangeWidget, IntervalFormField, SwitheryInput, CheckBox, Form, Date
84 1 Dmitry Chernyak
85 1 Dmitry Chernyak
class TestForm(Form):
86 1 Dmitry Chernyak
    choices = (
87 1 Dmitry Chernyak
        ('spam', 'Spam'),
88 1 Dmitry Chernyak
        ('eggs', 'Eggs'),
89 1 Dmitry Chernyak
        ('spanish_inquisition', 'Spanish Inquisition'),
90 1 Dmitry Chernyak
    )
91 1 Dmitry Chernyak
    interval = IntervalFormField(label='Interval field', required=False) 
92 1 Dmitry Chernyak
    choice = forms.ChoiceField(label='Choice field', choices=choices, widget=Select2, required=False)
93 1 Dmitry Chernyak
    multiselect = forms.MultipleChoiceField(label='Multiple choices', choices=choices, widget=Select2Multiple, required=False)
94 1 Dmitry Chernyak
    swithery = forms.BooleanField(label='Swithery input', widget=SwitheryInput, required=False)
95 1 Dmitry Chernyak
    radiobox = forms.ChoiceField(label='Checkboxes', choices=choices, widget=CheckBox, required=False)
96 1 Dmitry Chernyak
    date = forms.DateField(label='Date', widget=Date)
97 1 Dmitry Chernyak
</pre>
98 1 Dmitry Chernyak
99 1 Dmitry Chernyak
h3. Виды
100 1 Dmitry Chernyak
101 1 Dmitry Chernyak
*BaseView* - базовый вид, от которого необходимо наследовать прочие виды проекта.
102 1 Dmitry Chernyak
103 1 Dmitry Chernyak
Переменные класса:
104 1 Dmitry Chernyak
# title - заголовок страницы. По-умолчанию: 'Base View';
105 1 Dmitry Chernyak
# title_icon - иконка страницы в формате названия из пакета Font Awesome. По умолчанию: 'bus';
106 1 Dmitry Chernyak
# position - идентификатор пункта меню, считающегося выбранным, когда страница открыта. По умолчанию: None;
107 1 Dmitry Chernyak
# breadcrumbs - значение, отвечающее за отображение "хлебных крошек" вверху страницы. По умолчанию: False;
108 1 Dmitry Chernyak
# menu - меню в левой колонке базового шаблона (см. "Редактирование меню"). По умолчанию: OrderedDict();
109 1 Dmitry Chernyak
# template_name - имя шаблона, использующегося в базовом виде. По умолчанию: 'django_gentelella/base.html'.
110 1 Dmitry Chernyak
111 1 Dmitry Chernyak
*GentelellaCreateView* - собственный вариант вида CreateView из django.views.generic.
112 1 Dmitry Chernyak
113 1 Dmitry Chernyak
Переменные класса:
114 1 Dmitry Chernyak
# menu - меню в левой колонке базового шаблона (см. "Редактирование меню"). По умолчанию: NotImplemented;
115 1 Dmitry Chernyak
# title - заголовок страницы. По умолчанию: NotImplemented;
116 1 Dmitry Chernyak
# template_name - имя шаблона, использующегося в виде. По умолчанию: NotImplemented.
117 1 Dmitry Chernyak
# model - модель, объект которой создаётся в данном виде. По умолчанию: NotImplementedError
118 1 Dmitry Chernyak
# form_class - использующаяся на странице форма. По умолчанию: NotImplemented.
119 1 Dmitry Chernyak
# success_url - ссылка, на которую будет совершён переход при успешном создании объекта. По умолчанию: NotImplemented.
120 1 Dmitry Chernyak
121 1 Dmitry Chernyak
Используется точно так же, как и CreateView из django.views.generic.
122 1 Dmitry Chernyak
123 1 Dmitry Chernyak
h3. Тэги шаблонов
124 1 Dmitry Chernyak
125 1 Dmitry Chernyak
*custom_table* - отрисовывает таблицу по заданным данным. В качестве аргументов принимает список данных и перечень полей (каждое поле записано как отдельный аргумент формата field__name="Name"). Первая строка внутри тэга - то, что следует отображать при отсутствии данных, далее - данные для тех полей с особым форматированием:
126 1 Dmitry Chernyak
127 1 Dmitry Chernyak
<pre>
128 1 Dmitry Chernyak
{% field 'name' %}
129 1 Dmitry Chernyak
<b>{{ obj.name }}</b>
130 1 Dmitry Chernyak
</pre>
131 1 Dmitry Chernyak
132 1 Dmitry Chernyak
Также поля можно подавать через объект OrderedDict, где ключи - это идентификаторы полей, а значения  - заголовки:
133 1 Dmitry Chernyak
134 1 Dmitry Chernyak
<pre>
135 1 Dmitry Chernyak
fields = OrderedDict((
136 1 Dmitry Chernyak
    ('first', 'First Thing'),
137 1 Dmitry Chernyak
    ('second', 'Second Thing'),
138 1 Dmitry Chernyak
    ('third', 'Third Thing'),
139 1 Dmitry Chernyak
    ('pseudo', 'Pseudothing')
140 1 Dmitry Chernyak
))
141 1 Dmitry Chernyak
</pre>
142 1 Dmitry Chernyak
143 1 Dmitry Chernyak
Закрывающий тэг: @{% end_custom_table %}@
144 1 Dmitry Chernyak
145 1 Dmitry Chernyak
Данные для таблицы подаются в виде списка словарей, где ключи - это названия полей таблицы.
146 1 Dmitry Chernyak
147 1 Dmitry Chernyak
Пример:
148 1 Dmitry Chernyak
149 1 Dmitry Chernyak
<pre>
150 1 Dmitry Chernyak
table_contents = [{
151 1 Dmitry Chernyak
    'first': 'Spam',
152 1 Dmitry Chernyak
    'second': 'Eggs',
153 1 Dmitry Chernyak
    'third': 'Spanish Inquisition',
154 1 Dmitry Chernyak
},
155 1 Dmitry Chernyak
{
156 1 Dmitry Chernyak
    'first': 'Something Completely Different',
157 1 Dmitry Chernyak
    'second': 'Ni!',
158 1 Dmitry Chernyak
    'third': 'What is your favourite colour?'
159 1 Dmitry Chernyak
}
160 1 Dmitry Chernyak
]
161 1 Dmitry Chernyak
</pre>
162 1 Dmitry Chernyak
163 1 Dmitry Chernyak
<pre>
164 1 Dmitry Chernyak
{% custom_table table_contents field__first='First Thing' field__second='Second Thing' field__third='Third Thing' field__pseudo='Pseudothing' %}
165 1 Dmitry Chernyak
  Nothing's going on here, citizen.
166 1 Dmitry Chernyak
  {% field 'pseudo' %}
167 1 Dmitry Chernyak
  Beware the simulacrum!
168 1 Dmitry Chernyak
{% end_custom_table %}
169 1 Dmitry Chernyak
</pre>
170 1 Dmitry Chernyak
171 1 Dmitry Chernyak
<pre>
172 1 Dmitry Chernyak
{% custom_table table_contents fields %}
173 1 Dmitry Chernyak
  Nothing's going on here, citizen.
174 1 Dmitry Chernyak
  {% field 'pseudo' %}
175 1 Dmitry Chernyak
  Beware the simulacrum!
176 1 Dmitry Chernyak
{% end_custom_table %}
177 1 Dmitry Chernyak
</pre>
178 1 Dmitry Chernyak
    
179 1 Dmitry Chernyak
!table.png!
180 1 Dmitry Chernyak
181 1 Dmitry Chernyak
*xpanel* - div-контейнер для элементов в виде панели. В качестве обязательного аргумента принимает заголовок. Пример:
182 1 Dmitry Chernyak
183 1 Dmitry Chernyak
<pre>
184 1 Dmitry Chernyak
{% xpanel 'Заголовок' %}
185 1 Dmitry Chernyak
  содержимое
186 1 Dmitry Chernyak
{% end_xpanel %}
187 1 Dmitry Chernyak
</pre>
188 1 Dmitry Chernyak
189 1 Dmitry Chernyak
!panel.png!
190 1 Dmitry Chernyak
191 1 Dmitry Chernyak
*modal* - контейнер для элементов в виде вызываемого модального окна. Принимает следующие аргументы:
192 1 Dmitry Chernyak
## Заголовок
193 1 Dmitry Chernyak
## size - размер окна
194 1 Dmitry Chernyak
## id_ - идентификатор окна
195 1 Dmitry Chernyak
196 1 Dmitry Chernyak
Пример использования:
197 1 Dmitry Chernyak
198 1 Dmitry Chernyak
<pre>
199 1 Dmitry Chernyak
<button class='btn btn-primary' data-toggle="modal" data-target="#modal">Check messages</button>
200 1 Dmitry Chernyak
201 1 Dmitry Chernyak
{% modal 'Заголовок' size='xl' id_='modal' %}
202 1 Dmitry Chernyak
  Содержимое
203 1 Dmitry Chernyak
{% end_modal %}
204 1 Dmitry Chernyak
</pre>
205 1 Dmitry Chernyak
206 1 Dmitry Chernyak
!modal.png!
207 1 Dmitry Chernyak
208 1 Dmitry Chernyak
h3. Шаблоны
209 1 Dmitry Chernyak
210 1 Dmitry Chernyak
*base* - базовый шаблон, в который встраиваются все страницы сайта в теме. 
211 1 Dmitry Chernyak
*footer* - футер страницы.
212 1 Dmitry Chernyak
*login* - стандартная страница логина.
213 1 Dmitry Chernyak
214 1 Dmitry Chernyak
h3. Редактирование бокового меню
215 1 Dmitry Chernyak
216 1 Dmitry Chernyak
Для того чтобы сделать кастомное боковое меню, следует создать собственный вид, наследующийся от BaseView из django_gentelella, в котором указать переменную menu с желаемым меню, сформированным в формате OrderedDict. Каждый элемент словаря должен иметь в качестве ключа уникальный идентификатор, а в качестве значения - кортеж или список со следующими данными:
217 1 Dmitry Chernyak
# Название пункта
218 1 Dmitry Chernyak
# Ссылка, на которую ведёт пункт
219 1 Dmitry Chernyak
# Описание пункта
220 1 Dmitry Chernyak
# Права, которыми должен обладать пользователь для отображения или сокрытия пункта. Например ['right_to_view|1'], где слева от | указано название права, справа - показывать или, наоборот, скрывать пункт при наличии такого права у пользователя.
221 1 Dmitry Chernyak
# Дочерние пункты
222 1 Dmitry Chernyak
223 1 Dmitry Chernyak
Пример использования:
224 1 Dmitry Chernyak
225 1 Dmitry Chernyak
<pre>
226 1 Dmitry Chernyak
MENU = OrderedDict((
227 1 Dmitry Chernyak
    # название, ссылка, описание, 'права|показывать[01]', иконка
228 1 Dmitry Chernyak
    ('main_page', (
229 1 Dmitry Chernyak
        'Страница', reverse_lazy(''),
230 1 Dmitry Chernyak
        'Это страница, на ней написано', [],
231 1 Dmitry Chernyak
        'credit-card', OrderedDict((
232 1 Dmitry Chernyak
            ('ultra_main_page', (
233 1 Dmitry Chernyak
                'Та же страница', reverse_lazy(''),
234 1 Dmitry Chernyak
                'Дочерний пункт меню', [],
235 1 Dmitry Chernyak
                'credit-card', OrderedDict((
236 1 Dmitry Chernyak
                    
237 1 Dmitry Chernyak
                ))
238 1 Dmitry Chernyak
            )),
239 1 Dmitry Chernyak
        ))
240 1 Dmitry Chernyak
    )),
241 1 Dmitry Chernyak
    ('submain_page', (
242 1 Dmitry Chernyak
        'Та же страница', reverse_lazy('test'),
243 1 Dmitry Chernyak
        'Это та же самая страница', [],
244 1 Dmitry Chernyak
        'credit-card', OrderedDict(())
245 1 Dmitry Chernyak
    )),
246 1 Dmitry Chernyak
    ))
247 1 Dmitry Chernyak
248 1 Dmitry Chernyak
249 1 Dmitry Chernyak
class MyBaseView(BaseView):
250 1 Dmitry Chernyak
    menu = MENU
251 1 Dmitry Chernyak
    template_name = 'django_gentelella/base.html'
252 1 Dmitry Chernyak
    title_icon = 'balance-scale'
253 1 Dmitry Chernyak
    title = 'DG Test'
254 1 Dmitry Chernyak
    permission_required = ()
255 1 Dmitry Chernyak
256 1 Dmitry Chernyak
    def get(self, request, *args, **kwargs):
257 1 Dmitry Chernyak
        return super().get(request, *args, **kwargs)
258 1 Dmitry Chernyak
</pre>
259 1 Dmitry Chernyak
260 1 Dmitry Chernyak
Создаваемые впоследствие виды наследоваться от MyBaseView.
261 1 Dmitry Chernyak
262 1 Dmitry Chernyak
!menu.png!
263 1 Dmitry Chernyak
264 1 Dmitry Chernyak
h3. Тэги
265 1 Dmitry Chernyak
266 1 Dmitry Chernyak
Тэги - это шаблоны компонентов, которые можно импортировать в собственный шаблон для стандартизированного рендера отдельных его частей.
267 1 Dmitry Chernyak
268 1 Dmitry Chernyak
**form_template** - шаблон для рендера форм. 
269 1 Dmitry Chernyak
Пример использования:
270 1 Dmitry Chernyak
271 1 Dmitry Chernyak
<pre>
272 1 Dmitry Chernyak
{% include 'django_gentelella/tags/form_template.html' with form=form %}
273 1 Dmitry Chernyak
</pre>
274 1 Dmitry Chernyak
275 1 Dmitry Chernyak
!form_t.png!
276 1 Dmitry Chernyak
277 1 Dmitry Chernyak
h3. Скрипты
278 1 Dmitry Chernyak
279 1 Dmitry Chernyak
*native_message* - скрипт на JS для создания браузерных уведомлений. Принимает следующие аргументы:
280 1 Dmitry Chernyak
# title - заголовок;
281 1 Dmitry Chernyak
# message - сообщение;
282 1 Dmitry Chernyak
# options - опции уведомления.
283 1 Dmitry Chernyak
284 1 Dmitry Chernyak
h2. Дополнительные материалы
285 1 Dmitry Chernyak
286 1 Dmitry Chernyak
"Gentelella Alela!":https://colorlib.com/polygon/gentelella/index.html - демо-страница темы Gentelella.
Добавить изображение из буфера обмена (Максимальный размер: 5 МБ)