0

私は Django を発見しています。インデックス ビューの send_mail() 関数が 1 回は正常に機能するのに、インデックス ページをリロードすると機能しない理由がわかりません。

見る:

class IndexView(generic.ListView):
model = Quote
template_name = 'quotes/index.html'
context_object_name = 'quotes_list'

send_mail('Test Dj', 'Here is the message.', 'from@example.com',
['to@example'], fail_silently=False)


def get_queryset(self):
    return Quote.objects.all()

初めてページをロードすると、すべてが機能し、メールが届きます。

その後、ページをリロードすると、2 通目のメールが届きません。

4

1 に答える 1

1

send_mail()問題は、クラス定義内にある呼び出しの配置にあります。Django は多くの場合、オブジェクトを遅延ロードします。つまり、コードは最初に使用されたときにのみインポートされます。あなたの場合、最初にビューを実行すると、Django はビューを含むモジュールをインポートし、IndexViewクラスの解析中に電子メールを送信します。ただし、後続のページ ビューでは、コードは既に読み込まれており、クラス定義は再解析されないため、send_mail()呼び出しは行われません。

send_mail()クラス内のビュー関数内に呼び出しを移動する必要がありますIndexView

class IndexView(generic.ListView):
    ....
    def get(self, request):
        # Send email on every get request.
        send_mail('Test Dj', 'Here is the message.', 'from@example.com', ['to@example'], fail_silently=False)
        return super(IndexView, self).get(request)
于 2013-10-01T00:44:15.727 に答える