Как сделать кнопку django

Добавил пользователь Евгений Кузнецов
Обновлено: 20.09.2024

Джанго — это 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') .

Читайте также: