1

Django からメールを送信する場合、(少なくとも私にとっては) Site オブジェクトを使用してベース URL を取得するのが通例です。すなわち'http://{}{}'.format(Site.objects.get_current(), reverse('my_view'))

しかし、Django 1.6 ではサイト フレームワークがデフォルトで有効になっていません。

もちろん、settings.py ファイルにベース URL を追加できますが、ベース URL を取得する Django 固有の方法はありますか?

テンプレートまたはビューにある場合は を使用できますがHttpRequest.build_absolute_uri(location)、Celery タスクを使用してメールを送信する場合、これは単純ではありません (HttpRequest オブジェクトのインスタンスがないため)。

質問は次のとおりです。ホストを取得するための最もDjangonicな方法は何ですか?メール(またはリクエストオブジェクトを持たない他の領域)で使用される絶対URLを構築するために?

4

1 に答える 1

0

そうは思わないかもしれません (私を含め、多くの人があなたが説明したようなサイト フレームワークを使用しています)、Django のサイト フレームワークの目的はそれではありません。ドキュメントから:

単一の Django インストールが複数のサイトを強化し、それらのサイトを何らかの方法で区別する必要がある場合に使用します。

それがデフォルトで無効になっている理由だと思います。

メールでホストを取得する場合は、設定に保存します。

# settings.py
SITE_HOST_NAME = 'example.com'

# email code
from django.conf import settings
SITE_HOST_NAME = getattr(settings, 'SITE_HOST_NAME', 'defaulthostname')

プラスとして、このアプローチはデータベースにヒットしません。「最もDjangonic」かどうかはわかりませんが、うまくいくはずです。

于 2013-11-12T13:03:21.667 に答える