2

django プロジェクトにシグナルを書きました。その中で、Web サイトのフル パスを含むメールを送信したいと考えています。しかし、そうするには、シグナル内のリクエスト オブジェクトを取得する必要があります。ありがとう。

    @receiver(pre_save, sender=AccessRequest)
    def email_if_access_true(sender, instance, **kwargs):
        #How can I get the full path of my website here?
        pass
4

3 に答える 3

3

request オブジェクトにアクセスできない場合は、Site モデルのマネージャーの get_current() メソッドを使用できます。

from django.contrib.sites.models import Site

@receiver(pre_save, sender=AccessRequest)
def email_if_access_true(sender, instance, **kwargs):
    current_site = Site.objects.get_current()
    if current_site.domain == 'foo.com':
        #do other stuff here
    else:
        pass

設定で定義したことを確認する必要がありSITE_ID=1ます

于 2013-03-20T10:25:51.470 に答える
2

pre_saveシグナルレシーバーに次のコードを挿入します。

from django.contrib.sites.models import get_current_site
current_site = get_current_site(request=None)
domain = current_site.domain
protocol = "http"

必要なコンテキスト変数をテンプレートに渡すことで、電子メールで Web サイトへの絶対 URL を生成できます。あなたaccess_requestのケースのインスタンスで、モデルにget_abosulte_url()メソッドが 1 つある場合AccessRequest、メール テンプレートの次の行で絶対 URL が得られます。

{{ protocol }}://{{ domain }}{% access_request.get_absolute_url %}

参照 -のPasswordResetFormdjango.contrib.auth.form

于 2013-03-20T10:31:25.467 に答える