Django : send_mail HttpResponseRedirect

Django : send_mail HttpResponseRedirect

我有一个关于 return HttpResponseRedirect

的问题

错误是找不到页面

请求URL:http://127.0.0.1:8000/home/

model.py

def on_post_save(sender, instance, signal, created, **kwargs):
if created:
    print 'created'
    send_mail(u"demande_Expertise", 'Bonjour je souhaite obtenir les droits d acces de ce materiau', 'patrice.kerviel@gmail.com',
        [instance.categorie.expert.utilisateur.email])
    return HttpResponseRedirect("http://127.0.0.1:8000")

else:
    if instance.etat=='0':
        send_mail(u"demande acceptée", u'Bonjour, votre demande est acceptée', u'patrice.kerviel@gmail.com',
                  [instance.user.email])
    elif  instance.etat=='1':
          send_mail(u"demande refusée", u'Bonjour, votre demande est refusée', u'patrice.kerviel@gmail.com',
                    [instance.user.email])
return HttpResponseRedirect('/')

urls.py

urlpatterns = patterns('',
                     #url(r'^$', main_page),
                     url(r'^$', mainView.as_view(), name='homepage'), 

这是什么问题?

你不应该 return 来自 on_post_save 的任何信号。这些 HttpResponseRedirect 响应在保存模型期间被丢弃。

显示保存模型实例的视图的代码。

编辑:好的,我看到你的观点了。将您的视图 success_url/home/ 更改为 /

class Demande_Expertise(CreateView):
    form_class = Demande_ExpertiseForm
    template_name = 'material/demande_expertise3.html'
    success_url = '/'

并且不要忘记从 on_post_save 函数中删除 return HttpResponseRedirect() 行。

我认为存在几个问题。

  1. HttpResponseRedirect 不匹配任何 urlpatterns
  2. 更重要的是,您不会return模特的回应

您可以在 views.py:

中执行类似的操作
def some_view(request):
  element = SomeModel(value=some_value, etc) #this has custom save actions
  if element.field == 'something:
  return redirect('homepage')

我不确定这是否回答了您的问题,但您可以在模型中自定义保存操作。但是,视图是您应该确定提供哪些模板或页面的地方。