Панель навигации и создание ссылки
Добавим в панель навигации ссылку для добавления записей. В файле layout.html добавим элемент списка с кнопкой, стилизованной Bootstrap:
<li><button class="btn btn-primary">Добавить запись</button></li>
Ссылка будет /news/create. Используем шаблонизатор Jinja для её указания.
Создание URL и view-функции
Создадим обработчик URL в файле urls.py приложения news:
path('create/', views.create, name='create')
И функцию create в views.py:
def create(request):
return render(request, 'news/create.html')
Эта функция возвращает шаблон create.html.
Создание HTML-шаблона и полей формы
Создадим файл create.html в templates/news/. Вставим базовый шаблон, изменим заголовок на «Форма добавления статьи» и добавим форму:
<form method="post">
{% csrf_token %}
<input type="text" class="form-control" placeholder="Название статьи">
<input type="text" class="form-control" placeholder="Анонс статьи">
<textarea class="form-control" placeholder="Текст статьи"></textarea>
<input type="date" class="form-control">
<input type="time" class="form-control">
<button type="submit" class="btn btn-success">Добавить статью</button>
</form>
Стилизация формы
Добавим стили в news.css. При отсутствии стилей, очистите кэш браузера (правая кнопка мыши → Просмотреть код → зажать клавишу перезагрузки, навести на «Очистить кэш», отпустить клавишу).
Связывание формы с моделью и обработка данных
Создадим forms.py:
from .models import Articles
from django import forms
class ArticlesForm(forms.ModelForm):
class Meta:
model = Articles
fields = ['title', 'anons', 'full_text', 'date']
Импортируем ArticlesForm в views.py:
from .forms import ArticlesForm
def create(request):
error = ''
if request.POST:
form = ArticlesForm(request.POST)
if form.is_valid():
form.save()
return redirect('home') # Или на страницу новостей
else:
error = 'Форма была заполнена неверно'
context = {'form': ArticlesForm(), 'error': error}
return render(request, 'news/create.html', context)
В create.html добавим вывод ошибки:
{% if error %}
<p style="color: red;">{{ error }}</p>
{% endif %}
В шаблоне create.html выведем поля формы:
{{ form.title.as_widget(attrs={'class': 'form-control', 'placeholder': 'Название статьи'}) }}
{{ form.anons.as_widget(attrs={'class': 'form-control', 'placeholder': 'Анонс статьи'}) }}
{{ form.full_text.as_widget(attrs={'class': 'form-control', 'placeholder': 'Текст статьи'}) }}
{{ form.date.as_widget(attrs={'class': 'form-control', 'placeholder': 'Дата публикации'}) }}
Создана функциональная форма для добавления записей в базу данных, связанная с моделью и стилизованная Bootstrap. Обработка данных происходит на странице.