如何在Django中获取完整的URL的服务器名称? [英] How do I get the server name in Django for a complete url?

查看:166
本文介绍了如何在Django中获取完整的URL的服务器名称?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我使用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参数%}

哪些工作正常,除了它会呈现相对的URL,如:
/ app_name / url_node / parameter



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



我该怎么做?如何动态获取服务器名称? (我不想硬编码,肯定)。



另一种问题的方法:我如何获取HttpServletRequest.getContextPath()ala Java,而是在Django / Python?



谢谢

解决方案

使用网站应用程序:

  Site.objects.get_current()。domain 

直接从文档中获取的示例:

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

def register_for_newsletter(request):
#检查表单值等,并订阅用户。
#...

current_site = Site.objects.get_current()
send_mail('感谢订阅%s快讯'%current_site.name,
'感谢您的订阅,我们非常感谢。\\\
\\\
-%s团队'%current_site.name,
'editor @%s'%current_site.domain,
[user.email ])

#...


I'm using django templates to create an e-mail. I do something like this:

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

My template uses named url patterns like so: {% url url_name parameter %}

Which works fine, except it will render a relative url, like: /app_name/url_node/parameter

Usually that is enough, but since this is an e-mail I really need it to be a full url - with the server name prepended, like: http://localhost:8000/app_name/url_node/parameter.

How can I do this? How do I dynamically get the server name? (I don't want to hardcode it for sure).

Another way of asking: how do I get HttpServletRequest.getContextPath() ala Java, but instead in Django/Python?

thanks

解决方案

Use sites application:

Site.objects.get_current().domain

Example direct from documentation:

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

    # ...

这篇关于如何在Django中获取完整的URL的服务器名称?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆