0

我正在发现 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()

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

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

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 回答