Как сделать кнопку django
Джанго — это Open Source фреймворк для создания веб-приложений различной сложности на Python. Одним из его основных преимуществ является то, что вам нужно позаботиться только о логике будущего веб-приложения, остальное сделает Django.
Мы создадим приложение, у которого будет панель администратора и возможность загружать загадки, а у пользователей, соответственно, возможность отвечать на них. Во время разработки будут использоваться Python 3.4.3 и Django 1.9.1.
Устанавливаем Django
Делается это очень просто, в командной строке нужно написать: pip install Django==1.9.1 .
Создаём проект
Если вы правильно установили Django, то после запуска django-admin --version вы увидите текущую версию фреймворка. Теперь создадим проект. Это можно сделать следующим образом: django-admin startproject django_example .
31 января – 2 февраля, Онлайн, Беcплатно
Как только создание проекта будет завершено, взглянем на директорию нашего проекта:
- django_example/__init__.py — пустой файл, который говорит Python, что данная директория должна восприниматься в качестве пакета.
- django_example/settings.py содержит конфигурацию нашего проекта.
- django_example/urls.py — здесь объявляются URL.
- django_example/wsgi.py — с помощью него приложение может работать с веб-сервером по протоколу WSGI.
- manage.py позволяет взаимодействовать с проектом.
Пишем веб-приложение на Django
Определим различие между проектом и приложением. Приложение — это программа, которая что-то делает, а проект — это группа приложений.
Итак, приступим к созданию приложения. Это делается следующим образом: python manage.py startapp riddles .
Как только создано веб-приложение, напишем вид, по правилам Джанго все виды должны храниться в файле views.py .
Теперь, чтобы привязать наш вид к URL, создадим файл urls.py .
В urls.py мы должны написать следующее:
Установка базы данных
По умолчанию в Django используется SQLite, если она вас не устраивает, то вы можете ознакомиться с нашей статьей, в которой мы рассказываем, как безболезненно перейти с SQLite на MySQL.
Теперь откроем django_example/settings.py и взглянем на переменную INSTALLED_APPS , она хранит все приложения, которые активны в текущем проекте. По умолчанию она содержит:
Данная модель обеспечивает Django информацией, необходимой для создания схемы базы данных и database-access API для доступа к объектам. Теперь нам нужно привязать наше приложение к нашему проекту, делается это следующим образом:
После этого нужно сделать миграцию: python manage.py makemigrations riddles . Вы должны увидеть следующее:
Так мы говорим Django, что в моделях были сделаны некоторые изменения, и их нужно сохранить в качестве миграции.
Проверить, что сделает миграция, можно так: python manage.py sqlmigrate riddles 0001 (0001 — версия миграции, которую мы хотим проверить). На выходе мы получим:
Заметьте, что команда sqlmigrate нужна только для проверки, каждый раз ее запускать необязательно.
Теперь дадим админу возможность изменять наши модели. Делается это так:
Вот что получится в итоге:
Возьмите небольшую паузу и поиграйтесь с панелью администратора. Вы будете приятно удивлены тем, что умеет Джанго.
Главная страница
Что нам нужно для создания главной страницы?
- Templates: скелет нашей страницы.
- Views: функция на Python для отображения контента.
Начнем с шаблонов. Создадим папку templates внутри папки riddle , а в ней создадим index.html .
Здесь мы используем csrf_token , он нужен для защиты от межсайтовой подделки запроса, каждая внутренняя форма должна его использовать. Теперь напишем виды для рендеринга наших шаблонов:
Давайте пройдемся по каждой функции веб-приложения на Django отдельно:
Теперь добавим наши функции в urls.py :
Стили
Для начала создадим директорию static , а в ней создадим файл main.css .
Немного изменим наши шаблоны:
Теперь вы можете создавать свои веб-приложения на Django. В качестве подсказки на старте работы с фреймворком воспользуйтесь одной из наших шпаргалок по Python.
Исходный код нашего приложения можно скачать по этой ссылке.
Если этот веб-проект на Django показался сложным, попробуйте пройти двухчасовой видеокурс. На нём вы пошагово создадите 3 веб-приложения: сокращатель ссылок, ToDo List и словарь английских слов.
Есть у меня такая привычка - редактировать html-код вручную. При написании новых статей на своем сайте я всегда делал разметку вручную, но однажды решил попробовать wysiwyg-редактор tinymce. Это хороший редактор, но мне он не подошел. Он делал много лишнего и не делал кое-чего нужного. Я не буду расписывать причины, по которым я от него отказался, т.к. это заняло бы слишком много места. Скажу лучше, как добавить в админку django несколько своих кнопок и повесить на них простые действия - обрамление выделенного текста в html-теги. Впрочем, вместо кнопок можно добавить все, что угодно.
Если вы хотите немного изменить админку джанго и добавить в нее свой функционал, не обязательно редактировать файлы джанго. Можно просто интегрироваться в ее шаблоны.
К примеру, есть у меня приложение 'articles', которое я использую для создания статей. Я хочу добавить на страницу создания/изменения статьи свой код. Для этого нужно создать в каталоге ваших шаблонов файл "templates/admin/articles/change_form.html". Имя каталога "articles" означает, что изменения нужно делать для приложения с таким же именем. Имя файла - "change_form.html" поидее может быть любым. Нужно добавить в этот файл следующий код:
Теперь зайдите в админку в приложение 'articles' (или как там оно у вас называется) и вверху страницы сможете обнаружить надпись "Hey!".
Я пытаюсь создать мою кнопку загрузки файла Django , но поскольку она обрабатывается через форму и явно не написана в HTML в шаблоне, я не могу ее напрямую с HTML и CSS стирать для других кнопок ввода типа.
Я попытался добавить свой CSS-класс в мой forms.py , но он поместил кнопку загрузки файла Django по умолчанию, расположенную поверх моей стилизованной кнопки CSS.
Мой код выглядит следующим образом:
Я также попытался определить widget в моем классе Meta следующим образом:
но это было похоже на мою первую попытку.
Есть ли другой способ выполнить это или есть некоторые логические ошибки, которые вы можете обнаружить в моем коде?
Для потомков вот решение, которое я нашел с помощью Bootstrap здесь.
Если вы хотите, чтобы стиль кнопки загрузки файла определял другую кнопку или ссылку и стиль, который. Затем установите событие click для запуска кнопки загрузки файла.
Чтобы сделать эту работу в форме Django, вы можете сделать ее с помощью widget.
Я знаю, что это старый поток, но ответы выше не решают проблему, и я почти хотел опубликовать аналогичный вопрос. Я нашел ответ, проверьте его здесь: Как я могу создать формы django с помощью bootstrap CSS?
Виджет – это представление поля в виде HTML кода. Виджеты обеспечивают генерацию HTML и извлечение соответствующих данных из GET/POST запросов.
Не следует путать виджеты с полями формы. Поля формы обеспечивают логику проверки вводимой информации и используются в шаблонах. Виджеты же отвечают за рендеринг форм на веб-странице и обработку переданных данных. Тем не менее, виджеты следует назначать на поля формы.
Назначение виджета¶
При добавлении поля на форму, Django использует стандартный виджет, наиболее подходящий к отображаемому типу данных. Для того, чтобы узнать какой виджет использует интересующий вас тип поля обратитесь к built-in fields.
Тем не менее, если потребуется указать другой виджет для поля, просто используйте аргумент widget при определении поля. Например:
Этот код создают форму, у которой полю комментария назначен виджет class: Textarea вместо стандартного TextInput widget.
Аргументы виджетов¶
Большинство виджетов принимают дополнительные аргументы. Они могут быть назначены при определении виджета для поля. В следующем примере атрибут years передаётся в SelectDateWidget :
Обратитесь к Встроенные виджеты для получения подробной информации о доступных виджетах и аргументах, которые они принимают.
Виджеты, унаследованные от виджета Select¶
Виджеты, унаследованные от виджета Select , предназначены для работы с вариантами. Они предоставляют список вариантов, из которых надо сделать выбор. Разные виджеты позволяют сделать выбор по-разному. Базовый виджет Select использует HTML тег
Этот атрибут является необязательным, если поле не имеет атрибут choices . В противном случае, его содержимое имеет преимущество над атрибутами Field .
NullBooleanSelect ¶
Виджет выбора с вариантами ‘Неизвестно’, ‘Да’ и ‘Нет’.
SelectMultiple ¶
Аналогично Select , но разрешён множественный выбор: .
RadioSelect ¶
Аналогично Select , но отображается в виде списка радио кнопок с помощью тегов :
Для более тонкого управления процессом генерации HTML кода, вы можете выводить радио кнопки в шаблон в цикле. Рассмотрим форму myform с полем beatles , которое использует RadioSelect в качестве виджета:
Она будет представлена в виде следующего HTML кода:
Код содержит теги . Также вы можете использовать атрибуты tag , choice_label и id_for_label для управления отображением каждой радио кнопки. Например, этот шаблон.
. преобразуется в следующий HTML:
Если вы просто выведите поле в шаблоне с помощью > , то кнопки будут выведены с помощью тега с , как было показано ранее.
Контейнер получает атрибут id , указанный в виджете.
При генерации радио кнопок теги label and input содержат атрибуты for и id соответственно. Каждая радио кнопка использует атрибут id_for_label для генерации ID элемента.
CheckboxSelectMultiple ¶
Аналогичен SelectMultiple , но отображается в виде списка чекбоксов.
Контейнер получает атрибут id , указанный в виджете.
Как и для RadioSelect , теперь можно использовать цикл по чекбоксам. Смотрите описание RadioSelect .
При генерации чекбоксов теги label and input содержат атрибуты for и id соответственно. Каждый чекбокс использует атрибут id_for_label для генерации ID элемента.
Виджеты для загрузки файлов¶
FileInput ¶
Загрузка файла: type='file' . >
ClearableFileInput ¶
Загрузка файла: type='file' . > , с дополнительным чекбоксом для очистки значения поля, если оно не является обязательным и имеет начальные данные.
Сложные виджеты¶
MultipleHiddenInput ¶
Виджет, который обрабатывает множество скрытых виджетов для полей, которые содержат список значений.
Этот атрибут является необязательным, если поле не имеет атрибут choices . В противном случае, его содержимое имеет преимущество над атрибутами Field .
SplitDateTimeWidget ¶
Обёртка ( MultiWidget с помощью) вокруг двух виджетов: DateInput для даты и TimeInput для времени.
SplitDateTimeWidget имеет два необязательных атрибута:
SplitHiddenDateTimeWidget ¶
SelectDateWidget ¶
Обёртка вокруг трёх виджетов Select – месяц, день и год.
Принимает несколько необязательных аргументов:
Необязательный список/кортеж с вариантами года. По умолчанию содержит текущий год и девять последующих.
Необязательный словарь списка месяцев.
Ключ словаря соответствует номеру месяца (начиная с 1), значения – отображаемое название:
Если поле DateField не обязательно, SelectDateWidget будет содержать пустое значение в начале списка (по умолчанию --- ). Вы можете поменять название элемента с помощью атрибута empty_label . empty_label принимает string , list , или tuple . Если указана строка, каждый будет содержать пустое значение. Если empty_label содержит list или tuple из 3-х строк – для каждого будет использоваться свое значение. Элементы используются в следующем порядке: ('year_label', 'month_label', 'day_label') .
Читайте также: