Как решить проблему: 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).
Django будет использовать эту структуру для переопределения значений по умолчанию.