我正在尝试在我网站的首页创建一个简单的订阅表单。我使用模型表单创建了视图(模型仅包含名称和电子邮件作为属性)。当我转到根地址(GET)时,它工作正常并加载表单。然后我用一些数据填充它,单击提交按钮(表单操作可以设置为''或'/',结果是相同的)它重定向到相同的根页,但它不加载任何东西,页面保持空白。在控制台中,我可以看到它通过POST方法调用,但即使是第一次打印的view函数也没有打印出来。
有什么想法吗?我知道它一定是愚蠢的,但我花了一些时间在其中并且还没有发现它可能是什么。
在urls.py中:
url(r'', FrontPage.as_view(template_name='rootsite/frontpage.html')),
在rootsite / views.py
中class FrontPage(TemplateView):
'''
Front (index) page of the app, so that users can subscribe to
have create their own instance of the app
'''
template_name = 'rootsite/frontpage.html'
def get_context_data(self,
*args,
**kwargs):
c = {}
c.update(csrf(self.request))
print self.request.method
if self.request.method is 'POST':
print 'OK - POST IT IS, FINALLY'
form = NewUsersForm(self.request.POST)
print form.__dict__
if form.is_valid():
form.save()
return HttpResponseRedirect('/' + '?thanks=1')
else:
form = NewUsersForm()
return {'form':form}
答案 0 :(得分:1)
您无法从get_context_data中返回重定向 - 它仅用于上下文数据,因此是名称。
您应该使用正确的form view,其中包括在表单验证后重定向的方法。
答案 1 :(得分:0)
您是否在模板中添加了csrf_token(根据此处的示例:http://www.djangobook.com/en/2.0/chapter07.html)?
<form action="" method="post">
<table>
{{ form.as_table }}
</table>
{% csrf_token %}
<input type="submit" value="Submit">
</form>
我可能错了,但我认为Django不接受没有csrf令牌的POST请求?