Django-Templated-Email: TemplateDoesNotExist при импорте из другого файла - PullRequest
1 голос
/ 01 января 2012

У меня есть проект 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()),
            },
    )

In 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 в другие файлы и чтобы шаблоны работали правильно. Спасибо Брэдвиттингтону за ОЧЕНЬ полезный класс Джанго. Я с нетерпением жду, как правильно его использовать!

1 Ответ

0 голосов
/ 02 января 2012

Вы не должны импортировать представления из одного приложения в представления из другого. Попробуйте создать utils.py для email_app и добавить туда свою функцию. В настоящее время я делаю это для общей функции отправки электронной почты для проекта, используя файл globalutils.py в корне проекта. Он отправляет txt / html электронные письма из шаблонов, которые у меня есть в templates / 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)

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...