Djoser使用模板覆盖激活电子邮件

时间:2020-08-16 16:16:32

标签: python-3.x django-rest-framework django-templates djoser

我一直在寻找有关如何执行此操作的更多信息,但似乎几乎没有文档帮助。

本质上我想做的是为激活电子邮件创建一个新模板,以便链接可以以localhost:3000而不是localhost:8000开头(我将Vue用于前端发布请求,这就是为什么)

我设法找到了这个:https://github.com/sunscrapers/djoser/blob/master/djoser/templates/email/activation.html 但是当我将其添加到自己的项目中时,仍在使用默认的Djoser模板。

这是我的settings.py的样子:

BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [os.path.join(BASE_DIR, 'templates')],
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
        },
    },
]

我的激活URL(如果将8000手动替换为3000的话)有效:

 'ACTIVATION_URL': 'registration/activate/{uid}/{token}',

templates / email / activation.html:

{% block subject %}
{% blocktrans %}Account activation on {{ site_name }}{% endblocktrans %}
{% endblock subject %}

{% block text_body %}
{% blocktrans %}You're receiving this email becaus!!!!!!e you need to finish activation process on {{ site_name }}.{% endblocktrans %}

{% trans "Please go to the following page to activate account:" %}
{{ http }}://{{ localhost:3000 }}/{{ {% url 'registration/activate' uidb64=uid token=token %} }}

{% trans "Thanks for using our site!" %}

6 个答案:

答案 0 :(得分:2)

您可以在 settings.py 文件中配置 DOMAINSITE_NAME,而无需更改模板。 只需输入 DOMAIN = ('localhost:3000') 和 SITE_NAME = ('YOUR_SITE_NAME')

DOMAIN = ('localhost:3000') 
SITE_NAME = ('YOUR_SITE_NAME') 
DJOSER = {
    ...
}

来源:https://stackoverflow.com/a/62586798/6568539(我发现我们不需要使用本答案中提到的“config”)

答案 1 :(得分:1)

我想您需要覆盖email.ActivationEmail,例如覆盖core/email.py

from djoser import email


class ActivationEmail(email.ActivationEmail):
    template_name = 'email/activation.html'

并将其添加到您的设置中。py

DJOSER = {
    'EMAIL': {
            'activation': 'core.email.ActivationEmail'
    }
}

以下是可以覆盖link的电子邮件

答案 2 :(得分:0)

在不更改Djoser电子邮件类和settings.py的情况下,您可以使用概念here

覆盖项目模板目录中的html模板。

您只需要在'templates'文件夹中创建一个名为 email 的新文件夹,并在其中创建具有您要自定义/覆盖的电子邮件模板确切名称的html文件。

例如,如果您要自定义密码重置电子邮件,则自定义文件路径应类似于:

projectName/templates/email/password_reset.html

Here是您可以自定义的所有Djoser电子邮件模板的完整列表

答案 3 :(得分:0)

我发现了这个封闭的线程,它确实完成了让我渲染自定义模板的工作。可能要检查 this

答案 4 :(得分:0)

Pavlo Naumenko 的回答对我也有用,非常感谢。但只是一个小提示:我必须更改文件的名称(我不能在自己的模板上使用“activation.html”)。如果我使用它,django 会继续发送默认模板。不知道为什么。 万一有人也发生这种情况。我在 djoser 2.1.0 中使用 django 3.2.3

答案 5 :(得分:-1)

正在工作!我刚刚更改了activation.html文件 ~/.local/lib/python3.5/site-packages/djoser/templates/email 没有任何其他变化