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 %}

/app_name/url_node/parameter のような相対 URL をレンダリングすることを除いて、これは正常に機能します。

通常はこれで十分ですが、これは電子メールなので、完全な URL にする必要があり ます。たとえば、 http://localhost:8000/app_name/url_node/parameterのようにサーバー名を前に付けます。

これどうやってするの?サーバー名を動的に取得するにはどうすればよいですか? (確かにハードコードしたくありません)。

別の質問方法: HttpServletRequest.getContextPath() ala Java を取得するにはどうすればよいですか?

ありがとう

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 に答える