Формы в Django
Формы Django удобны тем, что мы можем создать новую форму с нуля (1) или воспользоватьсяModelForm
(2) для сохранения содержимого формы в модель.
Продолжая наш пример с книгами, давайте создадим простое представление, которое позволит пользователям производить поиск по нашей базе книг по их названию.
Обычно, разработка форм подразумевает два шага: пользовательский интерфейс в HTML и код сопровождающего представления, которое обрабатывает переданные данные.
(1)
Первый шаг несложен. Давайте создадим представление, которое отображает поисковую форму:
Соответствующий шаблон, templates/search_form.html
может выглядеть так:
Схема URL в mainapp/urls.py
может выглядеть так:
Если вы запустите runserver и посетите http://127.0.0.1:8000/search-form/ , вы увидите поисковый интерфейс. Очень простой.
Попробуйте отправить форму, несмотря на то, что вы получите ошибку 404. Форма указывает на URL /search/
, обработчик которого ещё не был реализован.
Давайте это исправим с помощью второй функции представления (mainapp/views.py):
Вкратце, мы проверяем, что «q» существует в request.GET, а также, что request.GET ['q'] является не пустым значением перед передачей его в запрос.
Мы используем
Book.objects.filter (name__contains = q),
чтобы запросить нашу таблицу книг для всех книг, название которых включает данную заявку.
Результаты поиска отображаем в шаблоне searchresults.html
Также существует фильтр "**\_icontains" , который включает данные без учета чувствительности к регистру**_
Давайте создадим шаблон для результатов поиска search_results.html
:
{% extends 'base.html' %}
{% load staticfiles %}
{% block content %}
<p>You searched for: <strong> {{ query }} </strong> </p>
{% if books %}
<p>Found {{ books|length }} book{{ books|pluralize }}.</p>
<ul>
{% for book in books %}
<li >{{ book.name }}</li>
{% endfor %}
</ul>
{% else %}
<p>No books</p>
{% endif %}
{% endblock %}
где books | length
- показывает количество найденный книг;
abooks | pluralize
- добавляет в конец 's'
если количество книг больше 1 ого
Осталось добавить url для нашей второй вьюшки в mainapp/urls.py
В итоге, у нас есть текстовое поле для поиска. При запросе нас перекидывают на другую страницу, с результатами поиска:
Так мы научились :
- писать формы с нуля;
- запрашивать данные с помощью метода GET;
- отображать результаты с помощью тегов;
- познакомились с некоторыми фильтрами.