如何获取Django中的服务器名称以获取完整的URL?

All*_*len 21 django-templates

我正在使用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()
Run Code Online (Sandbox Code Playgroud)

我的模板使用命名的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?

谢谢

小智 16

使用网站申请:

Site.objects.get_current().domain
Run Code Online (Sandbox Code Playgroud)

直接来自文档的示例:

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])

    # ...
Run Code Online (Sandbox Code Playgroud)

  • 不使用网站怎么样?有没有办法做到这一点?不得不依赖模型是非常愚蠢的. (7认同)
  • 请参阅http://stackoverflow.com/questions/2345708/how-can-i-get-the-full-absolute-url-with-domain-in-django (4认同)
  • 您始终可以在设置文件中进行设置,并使用local_settings文件覆盖它 (2认同)