【发布时间】:2014-04-24 21:43:42
【问题描述】:
我有一些“保存”代码,在成功创建记录后使用 Django 消息传递框架设置成功消息,然后重定向回主“application_update”视图。我无法确定为什么这些消息没有通过重定向。在执行“render_to_response”时,消息传递似乎工作得很好,但在执行“重定向”时却不行。
views.py 中的函数 sn-p(如果是 POST):
if ovrd_form.is_valid():
fields = {'application': ovrd_form.cleaned_data['application'],
'course': ovrd_form.cleaned_data['course'],
* other field/values *
}
try:
overrides = Overrides(**fields)
overrides.save()
success_msg = 'Override creation was successful.'
create_message(request, success_msg, 'success')
except Exception, exception:
return HttpResponse('Error: ' + str(exception))
return redirect('application_update', app_id=app_id)
create_message() 函数:
from django.contrib import messages
def create_message(request, msg, msg_type):
""" build a message & sets the correct message.type """
if msg_type == 'error':
django.contrib.messages.error(request, msg)
elif msg_type == 'warning':
django.contrib.messages.warning(request, msg)
elif msg_type == 'success':
django.contrib.messages.success(request, msg)
elif msg_type == 'info':
django.contrib.messages.info(request, msg)
elif msg_type == 'debug':
django.contrib.messages.debug(request, msg)
所有模板都继承了这段代码:
{% if messages %}
{% for message in messages %}
{% comment %}force -danger if error type for bootstrap css class{% endcomment %}
{% if message.tags == 'error' %}
<div class="alert alert-danger">
{% else %}
<div class="alert alert-{{ message.tags }}">
{% endif %}
<button type="button" class="close" data-dismiss="alert">×</button>
<span>{{ message }}</span>
</div>
{% endfor %}
{% endif %}
非常感谢任何帮助。
【问题讨论】:
-
您是否在显示消息的视图中使用 RequestContext?
-
@DanielRoseman -- 不,我没有使用 RequestContext,我也不熟悉它。我应该使用它吗?
-
嗯,有些东西需要将消息传递到上下文中。从该视图发布渲染调用。
-
@DanielRoseman -- 你是说这个吗? -->
return render_to_response('view.html', {'form': ovrd_form}, context)