23

我正在使用 django 模板来创建电子邮件。我做这样的事情:

msg_html = render_to_string('email/%s.html' % template_name, context)
msg = EmailMultiAlternatives(subject, msg_text, from_email, to_list)
msg.attach_alternative(msg_html, "text/html")
msg.content_subtype = "html"
msg.send()

我的模板使用如下命名的 url 模式: {% url url_name parameter %}

效果很好,除了它会呈现一个相对的url,比如:/app_name/url_node/parameter

通常这就足够了,但由于这是一封电子邮件,我真的需要它是一个完整的 url - 前面有服务器名称,例如: http://localhost:8000/app_name/url_node/parameter

我怎样才能做到这一点?如何动态获取服务器名称?(我不想肯定地对其进行硬编码)。

另一种提问方式:我如何获得 HttpServletRequest.getContextPath() ala Java,而不是在 Django/Python 中?

谢谢

4

1 回答 1

19

使用站点应用程序:

Site.objects.get_current().domain

直接来自文档的示例:

from django.contrib.sites.models import Site
from django.core.mail import send_mail

def register_for_newsletter(request):
    # Check form values, etc., and subscribe the user.
    # ...

    current_site = Site.objects.get_current()
    send_mail('Thanks for subscribing to %s alerts' % current_site.name,
        'Thanks for your subscription. We appreciate it.\n\n-The %s team.' % current_site.name,
        'editor@%s' % current_site.domain,
        [user.email])

    # ...
于 2009-05-22T09:27:02.717 回答