send_mail()在页面重新加载时不起作用

时间:2013-09-30 20:40:33

标签: django email django-views

我发现了Django,我不明白为什么我的索引视图中的send_mail()函数工作正常,但是当我重新加载索引页时却没有。

视图:

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()

我第一次加载页面,一切正常,我收到邮件。

然后我重新加载页面,我没有收到第二封邮件。

1 个答案:

答案 0 :(得分: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)