我目前以管理员身份通过电子邮件发送自己提交的表单信息,因此我可以联系客户。我不知道如何简单地将所有表单变量传递给Django电子邮件模板。我不得不单独定义。有没有一种方法可以传递所有上下文变量,所以我没有定义每个变量?
form_class = CustomProjectBuildRequestForm
success_url = reverse_lazy('home')
success_message = "Form successfully submitted!"
def form_valid(self, form):
form.save()
context = {
'first_name': form.cleaned_data.get('first_name'),
'last_name': form.cleaned_data.get('last_name'),
'email': form.cleaned_data.get('email'),
'phone': form.cleaned_data.get('phone_number'),
'zip_code': form.cleaned_data.get('zip_code'),
'project_title': form.cleaned_data.get('project_name'),
'project_description': form.cleaned_data.get('project_description'),
'contact_method': form.cleaned_data.get('preferred_contact_method'),
}
template = get_template('request-custom-project/email_template.html')
content = template.render(context)
send_mail(
'New Custom Project Request',
html_message=content,
message=content,
from_email=context['email'],
recipient_list=['test@gmail.com'],
fail_silently=False,
)
return super(PMPIndex, self).form_valid(form)
答案 0 :(得分:1)
from.cleaned_data
应该是simple dictionary(或OrderDict
之类的变体)。 template希望将类似dict
的对象作为上下文。因此,您可以简单地将cleaned_data
用作context
:content = template.render(form.cleaned_data)
。
如果您在模板中需要一些其他值,我建议以下内容
context = {
'some': 'extra',
'values': 1,
}
context.update(form.cleaned_data)
content = template.render(context)