2009-05-21 3 views
20

私はdjangoテンプレートを使用して電子メールを作成しています。私はこのような何かを: {%のurl URL_NAMEパラメータ%}それはのように、相対URLをレンダリングします除き、正常に動作します完全な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パターンを命名使用し /app_name/url_node/parameter

通常はこれで十分ですが、これは電子メールであるため、完全なURLにする必要があります。サーバー名の先頭には、 http://localhost:8000/app_name/url_node/parameterなどがあります。

どうすればいいですか?どのように動的にサーバー名を取得するのですか? (私は確かにそれをハードコードしたくない)。

もう1つの方法:HttpServletRequest.getContextPath()ala Javaを取得するにはどうすればよいですか?代わりにDjango/Python?

おかげ

答えて

16

利用サイトのアプリケーション:

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, 
     '[email protected]%s' % current_site.domain, 
     [user.email]) 

    # ... 
+6

方法についてのサイトを使用せずに?これを行う方法はありますか?モデルに頼らざるを得ないのはかなり愚かです。 – JamesD

+2

いつでも設定ファイルに設定し、local_settingsファイルでオーバーライドすることができます – super9

+4

http://stackoverflow.com/questions/2345708/how-can-i-get-the-full-absolute-url-withを参照してください-domin-in-django – glarrain

関連する問題