我发现了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()
我第一次加载页面,一切正常,我收到邮件。
然后我重新加载页面,我没有收到第二封邮件。
答案 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)