Hen*_*ynx 2 django-forms python-3.x wagtail
当用户提交表单时,我无法处理请求。
我在 HomePage 类的 get_context() 方法中呈现我的表单:
def get_context(self, request):
context = super(HomePage, self).get_context(request)
from .forms import RosaleaContactForm
if request.method == 'POST':
form = RosaleaContactForm(request.POST)
if form.is_valid():
subject = request.POST['subject']
name = request.POST['from_name']
message = request.POST['message']
to_email = request.POST['from_email']
from_phone = request.POST['from_phone']
send_mail(
subject,
name,
message,
from_email,
[to_email],
fail_silently=False,
)
form = form
else:
form = RosaleaContactForm()
context['form'] = form
return context
Run Code Online (Sandbox Code Playgroud)
表单在页面中呈现,我使用的是脆表单和 re_captcha,但是在提交表单时我无法处理请求。
如果我想将表单放在单独的页面上,我将使用 serve 方法,并且一切正常,但是 serve 会覆盖所有内容,并且我无法使用我的主页模板。
您应该覆盖页面的serve方法。这是 Wagtail 中与 Django 的视图函数最接近的等价物,因为它允许您根据表单处理的结果返回您喜欢的任何 HTTP 响应 - 渲染模板(最容易使用 Django 的django.shortcuts.render帮助程序)或其他内容,例如重定向。
有关将 Django 表单实现为 Wagtail 页面的工作示例,请参阅wagtail-form-example。
来自gasman的回答:它有效。
def serve(self, request):
from flavours.forms import FlavourSuggestionForm
if request.method == 'POST':
form = FlavourSuggestionForm(request.POST)
if form.is_valid():
flavour = form.save()
return render(request, 'flavours/thankyou.html', {
'page': self,
'flavour': flavour,
})
else:
form = FlavourSuggestionForm()
return render(request, 'flavours/suggest.html', {
'page': self,
'form': form,
})
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1327 次 |
| 最近记录: |