Проблема с вложением электронной почты в Django - PullRequest
0 голосов
/ 26 августа 2011

У меня есть форма модели:

class ManuscriptForm(forms.Form):
    name = forms.CharField(label='Your Name')
    sender = forms.EmailField(label='Your Email')
    attach  = forms.Field(label='Attach Your Manuscript', widget = forms.FileInput, required=False) # upload field!
    subject = forms.CharField()
    message = forms.CharField(widget = forms.Textarea)
    cc_myself = forms.BooleanField(required=False)

и вид:

def manuscript_form(request):
if request.method == 'POST': # If the form has been submitted...
    form = ManuscriptForm(request.POST, request.FILES) # A form bound to the POST data
    if form.is_valid(): # All validation rules pass
        name = form.cleaned_data['name']
        sender = form.cleaned_data['sender']
        attach = request.FILES['attach']
        subject = form.cleaned_data['subject']
        message = form.cleaned_data['message']
        cc_myself = form.cleaned_data['cc_myself']

        recipients = ['info@example.com']
        if cc_myself:
            recipients.append(sender)

        from django.core.mail import send_mail, EmailMessage
        mail = EmailMessage(subject, message, sender, recipients)
        mail.attach(attach.name, attach.read(), attach.content_type)
        mail.send()
        return HttpResponseRedirect('/thanks/') # Redirect after POST
else:
    form = ManuscriptForm() # An unbound form

return render_to_response('manuscript_form.html', {
    'form': form,
}, context_instance=RequestContext(request))

Проблема в том, что я получаю: "Key 'attach' not found in <MultiValueDict: {}>" ошибку. С возможностью крепления все работает нормально. Есть предложения?

1 Ответ

0 голосов
/ 26 августа 2011

замените attach = request.FILES['attach'] на attach = request.FILES.get('attach'), чтобы переменная attach была None, если пользователь не "прикрепил" ни один файл.

Когда вы делаете request.FILES['attach'], выПредполагая, что ключ присутствует, который мог быть перехвачен вашей программой проверки ошибок формы, за исключением того, что поле не required.

...