如何在Django中访问render_to_string的上下文?

时间:2013-09-01 21:01:23

标签: django django-templates

我有来自Django-registration app的代码。

  def send_activation_email(self, email):   
    email = email   
    ctx_dict = { 'activation_key' : self.activation_key,
         'expiration_days': settings.ACCOUNT_ACTIVATION_DAYS,
                                                            }

    subject = render_to_string('activation_email_subject.txt', ctx_dict)
    subject = ''.join(subject.splitlines())
    message = render_to_string('activation_email.txt', ctx_dict)

    send_mail(subject, message, 'gccFishing.com', [email],  fail_silently = False)

内部activation_email.txt是:这是正文

控制台的输出电子邮件是:

Content-Type: text/plain; charset="utf-8"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Subject: this is the subject
From: gccFishing.com
To: ipad@ap.com
Date: Sun, 01 Sep 2013 20:39:04 -0000
Message-ID: <20130901203904.3048.2540@hammad-P5QL-E>

this is the body
  1. ctx_dict在哪里存储?
  2. 如何访问ctx_dict以检查是否已发送激活密钥?
  3. 客户端点击链接后如何返回ctx_dict到服务器?

1 个答案:

答案 0 :(得分:2)

1. ctx_dict不会存储在任何位置 - 会将其传递给模板渲染器,以使activation_keyexpiration_days可用于您的模板。例如,更好的电子邮件模板是 -

Thanks for registering, you have {{expiration_days}} to activate your account at {% url 'registration_activate' activation_key %}

2.您无法在模板以外的任何地方访问ctx_dict(即使您间接访问它)也是如此。但是,您可以查询数据库。为已注册并且此时发送电子邮件的任何人创建RegistrationProfile。您可以通过查询User.is_active字段或测试RegistrationProfile.activation == Registration.ACTIVATED是否为真来测试它们是否已激活。

3.再说你没有。您可以在数据库中查询信息。

作为一个随意的观察,您似乎错误地使用django-registration来获取此信息。该应用程序有许多视图和已设置的urlconf来管理整个注册过程,您只需提供模板,按照the docs标准注册设置。