【问题标题】:Djoser override activation email with templateDjoser 使用模板覆盖激活电子邮件
【发布时间】:2020-12-05 21:36:35
【问题描述】:

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

基本上我想做的是为激活电子邮件创建一个新模板,以便链接可以以 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',
            ],
        },
    },
]

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

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

模板/电子邮件/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!" %}

【问题讨论】:

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


    【解决方案1】:

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

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

    并将其添加到您的 settings.py

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

    这里是可以覆盖的电子邮件link

    【讨论】:

    • 谢谢!这行得通。最初我尝试了它并且无法让它工作,因为我将激活文件放在我的项目而不是应用程序中的模板文件夹中。我最终只是从这个问题中休息了一下,今天重新审视了它。现在工作正常:)
    • 你知道如何个性化覆盖电子邮件中的用户名/名字吗?
    • @FedericoCapaldo 如果我没听错,您需要使用 {{user.first_name}} {{user.last_name}}。用户已经在上下文中
    • djoser 使用 django-templated-mail 至于使用 django 模板,所以如果您找不到模板,请查看文档docs.djangoproject.com/en/3.2/topics/templates/…
    【解决方案2】:

    在不更改 Djoser 电子邮件类和 settings.py 的情况下,您可以使用概念 here 覆盖项目模板目录中的 html 模板

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

    例如,如果您想自定义密码重置电子邮件,您的自定义文件路径应如下所示:

    projectName/templates/email/password_reset.html
    

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

    【讨论】:

      【解决方案3】:

      您可以在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”)

      【讨论】:

      • 你知道如何个性化覆盖电子邮件中的用户名/名字吗?
      【解决方案4】:

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

      【讨论】:

        【解决方案5】:

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

        【讨论】:

          【解决方案6】:

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

          【讨论】:

          • 您好,新贡献者!如果你能描述你做了什么以及它为什么奏效,那将会很有帮助。
          • djoser有一个激活模板,它默认使用它,所以我在djoser/templates/email中找到了它的模板,文件名为activation.html 我更改了文件内容并保存它。它无需任何代码更改即可工作
          • @Anas Ahmad 这不是一个好方法。如果您重新安装 Djoser pip install djoser,您编写的代码将被覆盖。
          • 没问题,我将html保存在myproject文件夹中,重新安装后复制。
          • 是的,但这总体上是不好的做法,这就是他想说的。每当您更改依赖项中的某些内容时,您应该始终确保它在您的项目代码中表示,使用覆盖或类似方法。
          猜你喜欢
          • 2018-04-19
          • 2021-08-09
          • 2021-05-13
          • 1970-01-01
          • 2019-01-12
          • 2021-05-12
          • 2021-04-19
          • 1970-01-01
          • 2018-05-16
          相关资源
          最近更新 更多