Как решить проблему: Django с Visual Studio Code Изменение шаблона без эффекта?

У меня есть приложение Django, и я использую Visual Studio Code в качестве редактора. Я реализовал функциональность для восстановления паролей через шаблон электронной почты. Я отредактировал шаблон, чтобы посмотреть, как это повлияет на электронное письмо, но изменения не дали никакого эффекта. Я даже удалил шаблон письма, но в папке "Входящие" все равно остался старый шаблон письма.

Шаблон электронной почты находится в папке с названием templates в приложении "Моя учетная запись".

Вот шаблон моего письма (password_reset_email.html):

<!-- templates/password_reset_email.html -->
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>Password Reset Request</title>
    <style>
        /* Add any styles you want for your email */
    </style>
</head>
<body>
   
    
    <p>Je  hebt om een wachtwoord reset aanvraag gevraagd voor je account.</p><br><p> Klik de link beneden om je wachtwoord te veranderen:</p>
    
    

    <p>Als je niet om een wachtwoord reset hebt gevraag, neem dan contact op met:</p> <br><p> test@test.nl. En klik niet op de link.</p>

    <p>Met vriendelijke groet,<br>Het  app team</p>
</body>
</html>

Но в моем почтовом ящике все еще есть это письмо:

Dag test gebruiker ,

Je hebt om een wachtwoord reset aanvraag gevraagd voor je account.


Klik de link beneden om je wachtwoord te veranderen:

Reset je wachtwoord

Als je niet om een wachtwoord reset hebt gevraag, neem dan contact op met:


test@nvwa.nl. En klik niet op de link.

Met vriendelijke groet,
Het test app team

А вот так выглядит файл views.py:

class PasswordResetRequestView(generics.GenericAPIView):
    permission_classes = [permissions.AllowAny]
    serializer_class = PasswordResetSerializer

    def post(self, request, *args, **kwargs):
        serializer = self.get_serializer(data=request.data)
        serializer.is_valid(raise_exception=True)
        #serializer.save()
        
        
        email = serializer.validated_data['email']
        user = Account.objects.filter(email=email).first()

        if user:
            uid = urlsafe_base64_encode(force_bytes(user.pk))
            token = default_token_generator.make_token(user)
            # React Native App URL
            reset_link = f"https://test.azurewebsites.net/reset-password/{uid}/{token}/"
            
             # Render the email template with the reset link
            html_content = render_to_string('password_reset_email.html', {
                'user': user,
                'reset_link': reset_link,
            })
            print(html_content)
            plain_text_content = strip_tags(html_content)
            # Code to send the email to user
            # Send the email
            send_mail(
                subject=' aanvraag ingediend',
                message=plain_text_content,  # Plain text version
                from_email='niels.fischereinie@gmail.com',  # Replace with your "from" email
                recipient_list=[email],  # Send email to the user
                html_message=html_content,  # HTML version
                fail_silently=False,
            ) 
            

            print(f"Password reset link: {reset_link}")  # For debugging
       
        print("password sent")
        return Response({"message": "If an account with the provided email exists, a password reset link has been sent."}, status=status.HTTP_200_OK)

Даже после удаления шаблона я все равно получаю старое содержимое письма. Как такое возможно?

Что я пробовал?

  • Я перезапустил сервер django.
  • Я закрыл и снова открыл visual studio code.
  • python manage.py clear_cache
  • Я открыл приложение в приватном режиме в браузере
  • В файле settings.py я добавил debug:True TEMPLATES = [ { 'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': [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', ], 'debug':True, }, }, ]

Настройки электронной почты в файле settings.py:

#Email settings:

# Email backend configuration
EMAIL_BACKEND = 'django.core.mail.backends.console.EmailBackend'

# SMTP host configuration
EMAIL_HOST = 'smtp.gmail.com'
EMAIL_PORT = 587
EMAIL_HOST_USER = 'test@gmail.com'
EMAIL_HOST_PASSWORD = 'password'

Я создал папку регистрации и поместил в нее шаблон: password_reset_email.html.

А в файле view.py я изменил путь:

 html_content = render_to_string('templates/registration/password_reset_email.html', {
                'user': user,
                'reset_link': reset_link,
            })

А также в serializers.py я изменил путь:

  # Render the email template
        email_subject = 'Password Reset Request'
        email_body = render_to_string('templates/registration/password_reset_email.html', {
            'user': user,
            'reset_link': reset_link
        })

Содержание шаблона:

<h3>Hello</h3>

Все еще получаете старый шаблон?

Я также перезапустил сервер django.

Я действительно не знаю, что еще можно изменить?

И у меня есть только один шаблон с таким именем. Это точно.

Может ли быть какая-то проблема с кодом visual studio?

Вопрос: как изменить шаблон электронной почты с эффектом?

Из сообщения следует, что вы помещаете "настроенный" шаблон в корневой каталог шаблона (например, ./templates/password_reset_email.html).

чтобы отменить значение по умолчанию, необходимо создать подкаталог registration в каталоге templates (например, ./templates/registration). я полагаю, что это чувствительно к регистру, и он должен называться registration. в каталоге registration необходимо создать html-файл (./templates/registration/password_reset_email.html).

enter image description here

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

Вернуться на верх