Пользовательская электронная почта активации не работает в Django - PullRequest
1 голос
/ 14 октября 2019

Цель - настраиваемое письмо с токеном активации. В настоящее время эта настройка работает, чтобы перейти по URL, но не по ссылке активации. Первый шаблон - это содержимое HTML, а второй - содержимое сообщения.

from_email = '<info@domain>'
#this is the custom template
htmly = get_template('activation.html')
#this is just the template of the message
message = render_to_string('activation_email.html', {
                'user':user,
                'token': account_activation_token.make_token(user),
                'uid':urlsafe_base64_encode(force_bytes(user.pk)),
})
reverse(
'activate',
kwargs={
    'token':force_text(urlsafe_base64_encode(force_bytes(user.pk))),
    'uidb64':urlsafe_base64_encode(force_bytes(user.pk))
})
subject = 'Email activation'
html_content = htmly.render(d) 
msg = EmailMultiAlternatives(subject, message, from_email, [request.user.email])
msg.attach_alternative(html_content, "text/html")
msg.send()

Я получаю сообщение об ошибке:

django.urls.exceptions.NoReverseMatch: Reverse for 'activate' with keyword arguments

Если я пытаюсь отправить его как один шаблон, т.е. как сообщение, так и мой пользовательский html в сообщении. Мой HTML отображается в виде строки.

Это письмо, которое я пытаюсь отправить. Activation_email содержит приведенное ниже сообщение, а Activation.html имеет собственный HTML-шаблон электронной почты.

активации_email.html

{% autoescape off %}
Hi {{ user.username }},
Email confirmation:
http://domain{% url 'activate' uidb64=uid token=token %}
{% endautoescape %}

url.py

path('activate/<uidb64>/<token>/', views.activate, name='activate'),

РЕДАКТИРОВАТЬ: Реверс ниже исправил эту ошибку, но все еще не исправил URL. Вы не можете кликнуть.

Это другой шаблон электронной почты, если он помогает.

<h3>Hi <strong>{{ username }}</strong>,</h3>
<p> Email Confirmation</p>
<a class="btn btn-primary" href="http://domain{% url 'activate' uidb64=uidb64 token=token %}">Email Activation</a>

1 Ответ

0 голосов
/ 14 октября 2019

Вы пытаетесь reverse с uid в kwargs, но ваш URL определен как ожидаемый uidb64

Как насчет:

reverse(
    'activate',
    kwargs={
        'token':force_text(urlsafe_base64_encode(force_bytes(user.pk))),
        'uidb64':urlsafe_base64_encode(force_bytes(user.pk))
    })
...