TypeError('контекст должен быть словарем, а не контекстом.',)

Я отправляю электронное письмо от Джанго, используя сельдерей. электронная почта уходила, и внезапно я начал получать сообщение об ошибке ниже, я не могу понять, что ее вызывает. пожалуйста, помогите. Заранее спасибо.

email.py

from django.conf import settings
from django.core.mail import EmailMessage
from django.template import Context
from django.template.loader import render_to_string


def send_pam_request_email(email, message):
    c = Context({'email': email, 'message': message})

    email_subject = render_to_string(
        'pam/email/pam_email_subject.txt', c).replace('\n', '')
    email_body = render_to_string('pam/email/pam_email_body.txt', c)

    email = EmailMessage(
        email_subject, email_body, [settings.DEFAULT_FROM_EMAIL], [email]
    )
    return email.send(fail_silently=False)

view.py

email = get_approvers_email()
messeage_new = """
New Request from {} that needs your attention.
url/{}/
""".format(requester,slug)
send_new_request_email_task.delay(email, messeage_new)

ошибка

[2020-06-10 08:34:22,773: INFO/MainProcess] Received task: send_new_request_email_task[ef9dbf20-6074-43e2-94dd-837f096bfeac]
[2020-06-10 08:34:22,785: INFO/ForkPoolWorker-7] send_new_request_email_task[ef9dbf20-6074-43e2-94dd-837f096bfeac]: Sent New PAM request email to the approvers
[2020-06-10 08:34:22,810: ERROR/ForkPoolWorker-7] Task send_new_request_email_task[ef9dbf20-6074-43e2-94dd-837f096bfeac] raised unexpected: TypeError('context must be a dict rather than Context.',)Traceback (most recent call last):
  File "/usr/local/lib/python3.6/site-packages/celery/app/trace.py", line 412, in trace_task
    R = retval = fun(*args, **kwargs)
  File "/usr/local/lib/python3.6/site-packages/celery/app/trace.py", line 704, in __protected_call__
    return self.run(*args, **kwargs)
  File "/code/web/pam/tasks.py", line 13, in send_new_request_email_task
    return send_pam_request_email(email, message)
  File "/code/web/pam/emails.py", line 11, in send_pam_request_email
    'pam/email/pam_email_subject.txt', c).replace('\n', '')
  File "/usr/local/lib/python3.6/site-packages/django/template/loader.py", line 62, in render_to_string
    return template.render(context, request)
  File "/usr/local/lib/python3.6/site-packages/django/template/backends/django.py", line 59, in render
    context = make_context(context, request, autoescape=self.backend.engine.autoescape)
  File "/usr/local/lib/python3.6/site-packages/django/template/context.py", line 270, in make_context
    raise TypeError('context must be a dict rather than %s.' % context.__class__.__name__)
TypeError: context must be a dict rather than Context.



person Raheel Soomro    schedule 10.06.2020    source источник


Ответы (1)


просто используйте dict для render_to_string документов django

c =  {'email': email, 'message': message}
person Saurabh Chandra Patel    schedule 10.06.2020