0

比較的単純な目的があります。ユーザーが登録したときにDjango管理者にメールを送信し、ユーザー名、メールなどのユーザー情報を含むアカウントをアクティブにしますdjango-registration。登録プロセスの処理に使用しています。次に、シグナルを使用してメールを送信します。このプロセスは問題なく機能しますが、ユーザー、ユーザー名、またはユーザーの電子メールを電子メール テンプレートに挿入しようとするとすぐに問題が発生します。

これが私のものsignal_connectors.pyです:

from django.core.mail import mail_admins
from django.dispatch import receiver
from registration.signals import user_registered
from django.template.loader import render_to_string

@receiver(user_registered, dispatch_uid="common.signal_connectors.user_registered_handler")
def user_registered_handler(sender, **kwargs):

    print('user registration completed...')

    subject = 'registration notify'
    template = 'common/email.html'
    message = render_to_string(template, {'user': user})
    from_email = 'from@example.com'

    # send email to admins, if user has been registered
    mail_admins(subject, message, fail_silently=False, connection=None, html_message=None)

    print('sending email to administrators...')

テンプレートは次のようになります。

{{ user }} has registered at example.com

{{user}}{{user.username}}、などのバリエーションを試し{{request.user.username}}ました。また、message上記の変数signals_connectors.pyでは、対応する import ステートメントを使用してバリエーションを試しました。

また、コンテキスト セットを使用してテンプレートをレンダリングしてみました。また、Web で見つけた他のバリエーションも試しました。

django-registration ユーザー名変数を見つける

私はエラーのためにこのようなものを取得し続けます:

global name 'user' is not defined

{{ user.username }}別のテンプレートのようなものを使用でき、それが機能するため、テンプレートコンテキスト処理が正しく設定されていると思います。

また、必要なオブジェクトを含めるようにインポートステートメントを修正しようとしましたが、うまくいきませんでした。このトピックについてウェブで見つけられるもののほとんどを試したので、途方に暮れています...

私は何が欠けていますか?

4

1 に答える 1

1

これがとても簡単なことだとは知りませんでした。この投稿に基づいて:

シグナルハンドラーはdjangoプロジェクトのどこに置くべきですか?

私は実際にユーザーとリクエストをシグナルコネクタメソッドの引数として追加しようとしましたが、これはうまくいきました:

. . .

@receiver(user_registered, dispatch_uid="common.signal_connectors.user_registered_handler")
def user_registered_handler(sender, user, request, **kwargs):

. . .

次に、これをメール テンプレートで使用しました。

{{ ユーザー }} が example.com に登録しました

私はおそらくこれを考えすぎましたが、誰もステップアップせず、これを助けることができなかったことに驚いています...

于 2014-01-03T17:13:36.383 に答える