Как отправить форму в html в django

Я пытаюсь отправить форму в 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. Как мне это исправить?

Вам также необходимо отобразить объект формы

Naren P 14.12.2018 06:11

где? и как?

Nick Campbell 14.12.2018 06:15

Вы всегда пытаетесь проверить форму, даже если это не был запрос POST.

John Gordon 14.12.2018 06:43
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
3
336
2

Ответы 2

Можешь попробовать

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.

Nick Campbell 14.12.2018 07:01

вам нужно вернуться за пределами условия if в вашем коде, и вы ничего не вернете.

Naren P 14.12.2018 07:14

Я обновил свой код. Вы не должны возвращать рендеринг вне условия if. когда вы отправляете свою форму, тогда только если условие будет действительным и входит в него, иначе оно не войдет. Ваш "return render ..." находится внутри условия if, которое является проблемой

Naren P 14.12.2018 07:18

получил эту ошибку Файл "C: \ Users \ 14153 \ Desktop \ Tradify.com \ Tradifycom \ contact \ views‌ .py", строка 13 возвращает рендеринг (запрос, шаблон, контекст) ^ SyntaxError: 'return' вне функции

Nick Campbell 14.12.2018 07:18

вернуть его внутри функции вне if. Может быть, ваш оператор возврата сейчас находится за пределами функции

Naren P 14.12.2018 07:19

Правильный формат рендеринга 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 не определен.

Nick Campbell 17.12.2018 21:00

потому что это было просто выдуманное название модели. Придется поменять его на желаемый. Я обновил код, чтобы было понятнее.

Rarblack 18.12.2018 07:04

Другие вопросы по теме