我有一个包含两个应用程序的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_DIR
和TEMPLATED_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类。我期待着学习如何正确使用它!
答案 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)
无论哪个应用程序调用它,都会发送电子邮件。