联系表格Django不工作

时间:2015-02-12 16:13:06

标签: html django forms contact-form

我正在尝试为我的Django网站创建一个联系表单,但它无法正常工作。联系表格有三个步骤。第1步有一个框,您可以在其中输入电子邮件的主题。第2步有一个框,您可以在其中输入发件人的电子邮件地址。此时,有三个按钮 - "第一步","上一步"和"提交"。如果我点击"提交",该网站不会将我带到第3步,这应该是您输入电子邮件正文的地方。相反,它将我重新回到第1步页面。

我做了我的研究,但我无法找到与此特定问题相关的在线内容。

这是我的views.py文件,它位于django_test / django_test目录中:

from django.shortcuts import render_to_response
from django.http import HttpResponseRedirect
from django.contrib import auth
from django.core.context_processors import csrf
from forms import MyRegistrationForm 
from django.contrib.formtools.wizard.views import SessionWizardView
from django.core.mail import send_mail
from django.core.urlresolvers import reverse
#import logging
#logr = logging.getLogger(__name__)

def login(request):
    c = {}
    c.update(csrf(request))
    return render_to_response('login.html', c)

def auth_view(request):
    username = request.POST.get('username', '')
    password = request.POST.get('password', '')
    user = auth.authenticate(username=username, password=password)

    if user is not None:
        auth.login(request, user)
        return HttpResponseRedirect('/accounts/loggedin')
    else:
        return HttpResponseRedirect('/accounts/invalid')

def loggedin(request):
    return render_to_response('loggedin.html',
                          {'full_name': request.user.username})

def invalid_login(request):
    return render_to_response('invalid_login.html')

def logout(request):
    auth.logout(request)
    return render_to_response('logout.html')

def register_user(request):
    if request.method == 'POST':
        form = MyRegistrationForm(request.POST)
        if form.is_valid():
            form.save()
            return HttpResponseRedirect('/accounts/register_success')

    args = {}
    args.update(csrf(request))

    args['form'] = MyRegistrationForm()

    return render_to_response('register.html', args)

def register_success(request):
    return render_to_response('register_success.html')

class ContactWizard(SessionWizardView):
    template_name = "contact_form.html"

    def done(self, form_list, **kwargs):
        form_data = process_form_data(form_list)

        return render_to_response('done.html', {'form_data': form_data})

def process_form_data(form_list):
    form_data = [form.cleaned_data for form in form_list]

    logr.debug(form_data[0]['subject'])
    logr.debug(form_data[1]['sender'])
    logr.debug(form_data[2]['message'])

    send_mail(form_data[0]['subject'],
          form_data[2]['message'], form_data[1]['sender'],
          [(my email address], fail_silently=False)

    return form_data 

这是我的forms.py文件,也位于django_test / django_test目录中:

from django import forms
from django.contrib.auth.models import User
from django.contrib.auth.forms import UserCreationForm

class MyRegistrationForm(UserCreationForm):
    email = forms.EmailField(required=True)

    class Meta:
        model = User
        fields = ('username', 'email', 'password1', 'password2')

    def save(self, commit=True):
        user = super(UserCreationForm, self).save(commit=False)
        user.email = self.cleaned_data['email']

        if commit:
            user.save()
        return user 

class ContactForm1(forms.Form):
    subject = forms.CharField(max_length=100)

class ContactForm2(forms.Form):
    sender = forms.EmailField()

class ContactForm3(forms.Form):
    message = forms.CharField(widget=forms.Textarea)

我的contact_form.html文件,位于django_test / templates目录中:

{% extends "base.html" %}

{% block content %}

    <h2>Contact Us</h2>
    <p>Step {{ wizard.steps.step1 }} of {{ wizard.steps.count }}</p>
    {% for field in form %}
        {{field.error}}

    {% endfor %}

    <form action="/contact/" method="post">{% csrf_token %}
    <table>
    {{ wizard.management_form }}
    {% if wizard.form.forms %}
        {{ wizard.form.management_form }}
        {% for form in wizard.form.forms %}
            {{ form }}
        {% endfor %}
    {% else %}
        {{ wizard.form }}
    {% endif %}
    </table>
    {% if wizard.steps.prev %}
    <button name="wizard_goto_step" type="submit" value="{{ wizard.steps.first }}">"first step"</button>
    <button name="wizard_goto_step" type="submit" value="{{ wizard.steps.prev }}">"prev step"</buttom>
    {% endif %}

    <input type="submit" value="submit" />

    </form>

{% endblock %}

这是我的urls.py文件:

from django.conf.urls import patterns, include, url
from django.contrib import admin
admin.autodiscover()

from django_test.api import ArticleResource

from django_test.forms import ContactForm1, ContactForm2, ContactForm3
from django_test.views import ContactWizard

article_resource = ArticleResource()

urlpatterns = patterns('',
                   url(r'^admin/', include(admin.site.urls)),
                   url(r'^accounts/login/$', 'django_test.views.login'),
                   url(r'^accounts/auth/$', 'django_test.views.auth_view'),
                   url(r'^accounts/loggedin/$', 'django_test.views.loggedin'),
                   url(r'^accounts/invalid/$', 'django_test.views.invalid_login'),
                   url(r'^accounts/logout/$', 'django_test.views.logout'),
                   url(r'^accounts/register/$', 'django_test.views.register_user'),
                   url(r'^accounts/register_success/$', 'django_test.views.register_success'),
                   url(r'^articles/all/$', 'article.views.articles'),
                   url(r'^articles/create/$', 'article.views.create'),
                   url(r'^articles/get/(?P<article_id>\d+)/$', 'article.views.article'),
                   url(r'^articles/like/(?P<article_id>\d+)/$', 'article.views.like_article'),
                   url(r'^articles/add_comment/(?P<article_id>\d+)/$', 'article.views.add_comment'),
                   url(r'^articles/search/', 'article.views.search_titles'),
                   url(r'^articles/api/', include(article_resource.urls)),
                   url(r'^contact/', ContactWizard.as_view([ContactForm1, ContactForm2, ContactForm3])),

)

我也没有收到任何错误消息,这令人沮丧,因此我不知道自己做错了什么。谢谢。

1 个答案:

答案 0 :(得分:1)

我所要做的就是查看网站上的页面来源。事实证明

  <button name="wizard_goto_step" type="submit" value="{{ wizard.steps.prev  }}">"prev step"</buttom>
contact_form.html中的

有一个拼写错误:</buttom>。我修复了错误,现在我得到了评论页面。

该行应为:

  <button name="wizard_goto_step" type="submit" value="{{ wizard.steps.prev }}">"prev step"</button>