【发布时间】:2018-01-02 14:45:44
【问题描述】:
我正在使用 django-registration 和我在 Github 上找到的一组预制模板来执行两步(注册-激活)工作流程 using HMAC。
我想将全局变量(在上下文处理器中定义)如我的网站名称传递给 django-registration 发送的电子邮件。例如,发送给新注册者的激活电子邮件,或更改密码的电子邮件。
“问题”是我无法直接访问这些视图。这就是 django-registration 的重点,您将其路径包含在 urls.py 文件中,一切正常:
urlpatterns = [
url(r'^', include('core.urls')),
url(r'^admin/', admin.site.urls),
url(r'^accounts/', include('registration.backends.hmac.urls')),
]
为这些视图添加上下文的最简单方法是什么?我已经创建并成功passing context to emails in my own views(使用上下文处理器):
def send_some_email_view(request):
msg_plain = render_to_string('email_change_email.txt', context, request=request)
msg_html = render_to_string('email_change_email.html', context, request=request)
但是我没有创建的视图呢?
编辑:所以我取得了一些进展,找到了 django-registration 的注册视图,以及里面的这个方法:
def send_activation_email(self, user):
"""
Send the activation email. The activation key is simply the
username, signed using TimestampSigner.
"""
activation_key = self.get_activation_key(user)
context = self.get_email_context(activation_key)
context.update({
'user': user
})
subject = render_to_string(self.email_subject_template,
context)
# Force subject to a single line to avoid header-injection
# issues.
subject = ''.join(subject.splitlines())
message = render_to_string(self.email_body_template,
context)
user.email_user(subject, message, settings.DEFAULT_FROM_EMAIL)
我不想在源代码中覆盖它,因为这会阻止我更新。所以现在问题变成了:我唯一的出路是编写一个子类这个视图并覆盖该方法的视图吗?这意味着我正在为 django-registartion 提供的每个需要发送电子邮件的视图编写单独的视图......
【问题讨论】:
-
哦 - 我在写完答案后读了最后一段 - 真丢人。这通常是使用 3rd 方库时的缺点。您可以按预期使用站点功能 - 或者为 django-registration 编写一个补丁,允许您通过设置为电子邮件设置额外的上下文数据 - 也许他们喜欢它。
-
哦,好吧,或者您只需提供一个补丁,该补丁还将请求传递给
render_to_string以进行所有电子邮件模板渲染调用 - 这只是一些更改的行,我想他们会欣赏这一点它不应该有任何副作用。
标签: python django django-registration