Проект

Общее

Профиль

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

Dmitry Chernyak, 17.02.2021 17:08

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