Почему проверка не работает?Джанго Формы - PullRequest
2 голосов
/ 04 января 2012

Я не могу понять, почему проверка не работает в моем приложении.

Моя проблема в том, что каждый раз, когда я отправляю форму в своем шаблоне ( base_contact.html ), приложение отправляет меня в представление / Thanks / , но это так странно потому что это происходит, даже если форма в шаблоне пуста или имеет несколько ошибок проверки. Поэтому я думаю, что form.is_valid () не работает должным образом в этом случае. Это мои файлы:

models.py

from django.db import models
from django import forms

class ContactForm(forms.Form):
    subject = forms.CharField(max_length=100)
    message = forms.CharField(widget=forms.Textarea())
    sender = forms.EmailField()
    cc_myself = forms.BooleanField(required=False)

views.py

from django.shortcuts import render_to_response
from django.core.context_processors import csrf
from django.http import HttpResponseRedirect
from main.models import ContactForm
from django.core.mail import send_mail

def contact(request):
if request.method == 'POST': # If the form has been submitted...
    form = ContactForm(request.POST) # A form bound to the POST data
    if form.is_valid(): # All validation rules pass
        # Process the data in form.cleaned_data
        subject = form.cleaned_data['subject']
        message = form.cleaned_data['message']
        sender = form.cleaned_data['sender']
        cc_myself = form.cleaned_data['cc_myself']
        recipients = ['example@gmail.com']

        send_mail(subject, message, sender, recipients)
        return HttpResponseRedirect('/Thanks/') # Redirect after POST
else:
    form = ContactForm() # An unbound form
return render_to_response('base_contact.html', {'form': form})

base_contact.html

<div class="forms">
<table>
<form action="/Contact/" method="post">{% csrf_token %}
    <tr><th><label for="id_sender">Your email:</label></th>
        <td><input class="text" type="text" name="sender" id="id_sender" /></td></tr>
    <tr><th><label for="id_subject">Subject:</label></th>
        <td><input class="text" id="id_subject" type="text" name="subject" maxlength="100" /></td></tr>
    <tr><th><label for="id_message">Message:</label></th>
        <td><textarea class="styletextarea" name="message" id="id_message" rows="7" cols="35" /></textarea></td></tr>
    <tr><td></td><td><input class="button" type="submit" value="Send" /></td></tr>
</form>
</table>
</div>

Спасибо за вашу помощь:)

1 Ответ

1 голос
/ 04 января 2012

Проверьте отступ следующей строки

return HttpResponseRedirect('/Thanks/')

В Python (и, следовательно, Django) отступ очень важен. рекомендуется использовать 4 пробела на уровень отступа.Избегайте использования вкладок.Вы часто можете изменить настройки вашего текстового редактора или использовать 4 пробела при нажатии клавиши табуляции.

...