Я пытаюсь отправить форму в HTML с помощью django. это форма
from django import forms
class contactForm(forms.Form):
name = forms.CharField(required=False, max_length=100,help_text='100 characters max.')
email = forms.EmailField(required=True)
comment = forms.CharField(required=True, widget=forms.Textarea)
Файл представления
from django.shortcuts import render
from .forms import contactForm
# Create your views here.
def contact(request):
form = contactForm(request.POST or None)
if form.is_valid():
print (request.POST)
context = locals()
template = 'contact.html'
return render(request, template, context)
и файл html с правильным названием:
{% extends 'base.html' %}
{% block content %}
<h1> Contact </h1>
<form method='POST' action=''> {% csrf_token %}
{{ form.as_p }}
<input type='submit' value='submit form' class='btn btn-default' />
</form>
{% endblock %}
Когда вы посещаете страницу, появляется только тег h1. Как мне это исправить?
где? и как?
Вы всегда пытаетесь проверить форму, даже если это не был запрос POST.






Можешь попробовать
def contact(request):
form = contactForm(request.POST or None)
if form.is_valid():
print (request.POST)
context = locals()
template = 'contact.html'
return render(request, template, context)
return render(request, 'contact.html', {'form': form})
вы получаете эту ошибку при попытке этого ValueError в / contact / Представление contact.views.contact не вернуло объект HttpResponse. Вместо этого он вернул None.
вам нужно вернуться за пределами условия if в вашем коде, и вы ничего не вернете.
Я обновил свой код. Вы не должны возвращать рендеринг вне условия if. когда вы отправляете свою форму, тогда только если условие будет действительным и входит в него, иначе оно не войдет. Ваш "return render ..." находится внутри условия if, которое является проблемой
получил эту ошибку Файл "C: \ Users \ 14153 \ Desktop \ Tradify.com \ Tradifycom \ contact \ views .py", строка 13 возвращает рендеринг (запрос, шаблон, контекст) ^ SyntaxError: 'return' вне функции
вернуть его внутри функции вне if. Может быть, ваш оператор возврата сейчас находится за пределами функции
Правильный формат рендеринга from следующий:
from django.shortcuts import reverse
from django.http import HttpResponseRedirect
from . import models
from . import forms
def contact(request):
if request.POST == 'POST':
form = forms.contactForm(request.POST or None)
contact_model = models.contactModel() #err is here name it with appropriate model name contactModel is just an example
if form.is_valid():
contact_model.name = form.cleaned_data['name']
contact_model.email = form.cleaned_data['email']
contact_model.comment = form.cleaned_data['comment']
contact_model.save()
return HttpResponseRedirect('/success/')) #desired url to redirect, you can use reverse to call templates according to url names
else: #if request is GET
form = forms.contactForm()
context = {
'form': form
}
template = 'contact.html'
return render(request, template, context=context)
Не используйте действие в своем шаблоне, просто настройте urls.py на перенаправление на желаемое представление.
Там написано, что contactForm не определен.
потому что это было просто выдуманное название модели. Придется поменять его на желаемый. Я обновил код, чтобы было понятнее.
Вам также необходимо отобразить объект формы