2012-01-01 1 views
1

У меня есть проект Django с двумя приложениями: email_app и landing_page_app. landing_page_app.views включает в себя email_app.views, так что он может использовать функцию new_lead_email.Django-Templated-Email: TemplateDoesNotExist при импорте из другого файла

В 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='[email protected]', 
     recipient_list=['[email protected]'], 
     context={ 
      'email': email, 
      'current_time': str(datetime.now()), 
      }, 
    ) 

В landing_page_app.views:

from email_app.views import new_lead_email 
new_lead_email(email) 

я получаю ошибку "TemplateDoesNotExist" для "templated_email/new_lead.txt". Функция new_lead_email работает правильно, если она не импортирована в landing_page_app.views (т. Е. Если у меня есть URL-адрес Django new_lead_email в email_app.views).

В settings.py, я установил TEMPLATED_EMAIL_TEMPLATE_DIR и TEMPLATED_EMAIL_FILE_EXTENSION в каталог, содержащий шаблон «new_lead.email». Это говорит о том, что файл vanilla_django.py в django-templated-email (https://github.com/bradwhittington/django-templated-email/blob/master/templated_email/backends/vanilla_django.py) не импортирует мои settings.py файл правильно.

У вас есть предложения по импорту функций в email_app.views в другие файлы и правильность работы шаблонов. Благодаря bradwhittington для ОЧЕНЬ полезного класса Django. Я с нетерпением жду, как правильно его использовать!

ответ

0

Вам не следует импортировать представления из одного приложения в представления из другого. Попробуйте создать utils.py для email_app и поместив туда свою функцию. В настоящее время я делаю это для общей функции отправки электронной почты для проекта, используя файл globalutils.py в корне проекта. Он отправляет электронные письма txt/html из шаблонов, которые у меня есть в шаблонах/email /, также в корне проекта.

Вот первые несколько строк метода

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) 

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

+0

Спасибо за ответ. Я переключился на общий файл для таких функций. У меня по-прежнему возникает такая же проблема, что функция 'send_templated_mail' неверно« читает »файл settings.py, чтобы знать, где искать шаблоны писем. – gwintrob

+0

Вы делаете include settings.py в своем общем файле и os.path.join (BASE_DIR, 'dir dir')? – dustinmm80