Django 1.6消息没有显示出来

时间:2014-02-06 19:54:31

标签: django django-messages

我按照docs将必要的内容导入到我的设置,视图和模板中。但是,没有消息显示。

MIDDLEWARE_CLASSES = (
    'django.middleware.common.CommonMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    # Uncomment the next line for simple clickjacking protection:
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
)

INSTALLED_APPS = (
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.sites',
    'django.contrib.messages',

示例视图:

from django.contrib import messages

def add_news(request):
    if request.method == 'POST':
        form = NewsForm(request.POST)
        if form.is_valid():
            form.save()
            messages.info(request, "News was added") 
            return HttpResponseRedirect('/')

    if request.method == 'GET':
        form = NewsForm()
        args = {}
        args.update(csrf(request))
        args['form'] = form
        return render_to_response('news/add_news.html', args)

在base.html中我有:

  {% block messages %}
            {% if messages %}
            <ul class="messages">   
            {% for message in messages %}
               <li{% if message.tags %} class="{{ message.tags }}"{% endif %}>{{ message }}</li>
             {% endfor %}
             </ul>
        {% endif %}
  {% endblock messages %}

我该如何调试?

1 个答案:

答案 0 :(得分:2)

messaging framework使用context_processor将消息传递给模板。要确保context_processors中的变量实际添加到您使用模板渲染的上下文中,您必须在视图中使用RequestContext

  

如果您正在使用上下文处理器,则应使用RequestContext呈现模板。否则,请确保模板上下文可以使用消息。

您正在使用默认情况下不执行此操作的render_to_response方法。您需要指定使用RequestContext或使用render函数代替默认执行此操作

return render_to_response('news/add_news.html',
                      args,
                      context_instance=RequestContext(request))