2012-04-18 48 views
0

我试图得到一个非常简单的电子邮件的形式工作。表格只有一个字段(电子邮件)。Django的烦恼与形式和CSRF令牌

forms.py

from django import forms 

class EmailForm(forms.Form): 
    email = forms.EmailField() 

views.py

from django.shortcuts import render_to_response 
from django.core.mail import EmailMultiAlternatives 
from django.template import RequestContext 
from launchpage.models import EmailForm 

def index(request): 
    if request.method == 'POST':   
     form = EmailForm(request.POST) 
     if form.is_valid(): 
      clean_data = form.clean_data 
      # send an email 
        thank_you = "Thanks for signing up" 
      return render_to_response('launch.html', {'thank_you': thank_you}) 
    else: 
     form = EmailForm() 
    return render_to_response('launch.html', {'form': form,}, context_instance=RequestContext(request)) 

launch.html(相关部分)

<div class="row-fluid"> 
    <div class="span12"> 
     {% if thank_you %} 
      <div class="alert alter-info"> 
      {{ thank_you }} 
      </div> 
     {% else %} 
      <form action="" method="post" class="form-horizontal">{% csrf_token %} 
      Or stay updated by email (no spam, pinky swear) &nbsp;&nbsp; 
      {{ form.email }} 
      <button type="submit" class="btn">Submit</button> 
     </form> 
     {% endif %} 
    </div> 
</div> 

中间件在settings.py

MIDDLEWARE_CLASSES = (
    'django.middleware.common.CommonMiddleware', 
    'django.contrib.sessions.middleware.SessionMiddleware', 
    'django.middleware.csrf.CsrfViewMiddleware', 
    'django.contrib.auth.middleware.AuthenticationMiddleware', 
    'django.contrib.messages.middleware.MessageMiddleware', 
) 

当前的结果:页面显示出来,就像没有涉及模板。我看到表单和提交按钮在那里,但没有电子邮件字段。也没有csrf隐藏字段。我一定是失去了一些东西愚蠢......

回答

1

假设这个:

from launchpage.models import EmailForm

不应该from launchpage.forms import EmailForm

你有另一个问题是{'form': form,}需求是{'form': form}

最后,{{ form.email }}应该是简单的{{ form }}

最终尖端 - 考虑使用可自动发送相应的请求上下文的render shortcut

+0

我不知道为什么你有一个downvote,那不是我。我解决了你提到的问题,并且一开始它就不起作用。然后我尝试重新启动Apache,它的工作!谢谢 – n0pe 2012-04-18 05:44:07