Page not found при отправке формы в джанго
Пишу сайт на джанго, когда жму кнопку с типом submit для отправки данных из формы в базу данных, мне выдаёт ошибку page not found. я пробовал закомментировать redirect, результат не меняется. файл views:
from django.shortcuts import render, redirect
from .models import Article
from .forms import ArticleForm
# Create your views here.
def index(request):
news=Article.objects.order_by('dateTime')
return render(request, 'newslist/index.html', {'news':news})
def add(request):
error=''
if request.method=='POST':
form=ArticleForm(request.POST)
if form.is_valid():
form.save()
return redirect('news')
else:
error='Некорректные данные!'
form=ArticleForm()
data={'form':form, 'error':error}
return render(request, 'newslist/add.html', data)
файл models:
from django.db import models
class Article(models.Model):
header=models.CharField('Название', max_length=50)
text=models.TextField('Текст', max_length=10000)
dateTime=models.DateTimeField('Время и дата')
def __str__(self):
return self.header
class Meta:
verbose_name='Новость'
verbose_name_plural='Новости'
def get_absolute_url(self):
return f'/{self.id}'
файл add.html:
{% extends 'newslist/layout.html' %}
{% block title %}
Добавить новость
{% endblock %}
{% block body %}
<div class="container">
<form action="post" class="form" >
{% csrf_token %}
{{ form.header }}<br>
{{ form.text }}<br>
{{ form.dateTime }}<br>
<span>{{ error }}</span>
<button type="submit" class="add addnew">Добавить запись</button>
</form>
</div>
файл forms:
from .models import Article
from django.forms import ModelForm, TextInput, Textarea, DateTimeInput
class ArticleForm(ModelForm):
class Meta:
model=Article
fields=['header', 'text', 'dateTime']
widgets={
'header':TextInput(attrs={
'class':'inputform inputname',
'placeholder':'Название'
}),
'text':Textarea(attrs={
'class':'inputform',
'placeholder':'Текст'
}),
'dateTime': DateTimeInput(attrs={
'class': 'inputform inputdate',
'placeholder': 'Дата и время'
})
}
файл urls (в приложении):
from django.contrib import admin
from django.urls import path, include
from . import views
urlpatterns = [
path('', views.index, name='main_page'),
path('/add', views.add, name='add')
]
файл urls (в папке всего проекта):
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('', include('newslist.urls'), name='news')
]
В шаблоне есть ошибка. В тэге <form>
аттрибут action
отвечает за URL, на который нужно отправлять запрос.
Поэтому для указания метода, нужно использовать атрибут method
, а в action
указать URL куда отправлять форму:
<form method="post" class="form" action="{% url 'add' %}">