提交按钮仍然发送邮件
我有一个叫做“发送确认邮件”的视图,主要功能是发送邮件。我想在同一个表单上添加一个按钮,用来删除订单号。不过,问题来了。如果我添加一个写着“删除订单”的按钮,出于某种原因,我的程序会把这个按钮当成“发送邮件”的按钮,结果就会发送邮件,尽管我已经把这个按钮设置成删除订单。我只想让这个按钮删除订单号,而不发送邮件。
def send_confirmation_email(request, order_no = 0, service_type = 0):
order = None
count = 0
title = models.SERVICE_CHOICES[int(service_type) - 1][1]
#title = type[1]
order_number = request.session['order_number']
if request.POST.get('delete'):
order_number.delete()
try:
order = models.Order.objects.get(pk = order_no)
count = order.orderservicelist_set.count()
if request.method == 'POST':
email = EmailMessage(subject = 'Order Confirmation')
email.to = [order.contact.email, request.user.email]
email.body = request.POST.get('email-message', '')
response = print_order(request, order_no)
#email.attach('order_details.pdf', response.content, 'application/pdf')
email.send(fail_silently = False)
request.user.message_set.create(message = "Email confirmation sent!")
return HttpResponseRedirect(reverse(return_clients))
except:
return HttpResponseRedirect(reverse(return_clients))
return render_to_response('order_confirmation.html', {'order':order, 'title':title, 'count':count, 'order_number':order_number}, context_instance = RequestContext(request))
{% block right_content %}
<div id="location_header">Confirmation email</div>
<form action="." method="post">
<div class="form_container">
<fieldset class="model"><legend>Email body</legend>
<br>
<textarea name="email-message" rows="20">
{{title}} Order Confirmation
Date : {{ order.date|date:"F d, Y" }}
<div id="form_footer">
` <input type="submit" value="Send email">
<input type="submit" value="delete" value="Delete Order">
</div>
</form>
{{order_number.pk}}
{% endblock %}
1 个回答
0
首先,你的代码会在删除之前就提交一个确认。
其次,你的 request.POST.get('delete')
这个部分出错了,因为在 POST 请求中没有找到 'delete'
这个内容。
你需要把提交按钮的 name
属性设置为 'delete'
: <input type="submit" name="delete" />
def send_confirmation_email(request, order_no = 0, service_type = 0):
order = None
count = 0
title = models.SERVICE_CHOICES[int(service_type) - 1][1]
#title = type[1]
order_number = request.session['order_number']
if request.POST.get('delete'):
order_number.delete()
else: # else or else you will always get a confirmation regardless of delete
# unless of course that's what you want.
try:
...