Django-Templated-Email:从其他文件导入时的TemplateDoesNotExist

时间:2012-01-01 19:55:30

标签: python django email email-integration

我有一个包含两个应用程序的Django项目:email_app和landing_page_app。 landing_page_app.views包含email_app.views,因此可以使用new_lead_email功能。

email_app.views

from datetime import datetime
from templated_email import send_templated_mail

def new_lead_email(email):
    send_templated_mail(
        template_name='new_lead',
        from_email='name@somewhere.com',
        recipient_list=['name@somewhere.com'],
        context={
            'email': email,
            'current_time': str(datetime.now()),
            },
    )

landing_page_app.views

from email_app.views import new_lead_email
new_lead_email(email)

我收到“templated_email / new_lead.txt”的“TemplateDoesNotExist”错误。 new_lead_email函数未导入landing_page_app.views时正常工作(即如果我在new_lead_email直接调用了Django网址email_app.views)。

在settings.py中,我将TEMPLATED_EMAIL_TEMPLATE_DIRTEMPLATED_EMAIL_FILE_EXTENSION设置为包含“new_lead.email”模板的目录。这表明django-templated-email(https://github.com/bradwhittington/django-templated-email/blob/master/templated_email/backends/vanilla_django.py)中的vanilla_django.py文件未导入我的settings.py文件正确。

对于如何将email_app.views中的函数导入其他文件并使模板正常工作,您有任何建议吗?感谢bradwhittington为一个非常有用的Django类。我期待着学习如何正确使用它!

1 个答案:

答案 0 :(得分:0)

您不应该将一个应用中的视图导入另一个应用的视图中。尝试为email_app创建一个utils.py并将您的函数放在那里。我目前正在使用项目根目录中的globalutils.py文件为项目的通用电子邮件发送功能执行此操作。它从模板/电子邮件/中的模板发送txt / html电子邮件,也在项目根目录中发送。

以下是方法的前几行

def send_message(template_name, subject_context, body_context, recipients, sender=None, send_email=True, send_internal=True):

subject = render_to_string("%s/%s_%s.%s" % ("email", template_name, "subject", "txt"), subject_context)
t_html = render_to_string("%s/%s_%s.%s" % ("email", template_name, "body", "html"), body_context)
t_text = strip_tags(t_html)

无论哪个应用程序调用它,都会发送电子邮件。