【问题标题】:Message middleware in Django not displaying in templateDjango中的消息中间件未在模板中显示
【发布时间】:2012-04-18 08:24:46
【问题描述】:

我正在尝试在 Django 中使用消息中间件,但视图根本不呈现它。我有什么:

views.py

messages.success(request, 'Test message.')
return render_to_response('base.html') 

模板.html

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

当我在视图中这样做时:

for message in messages.get_messages(request):
    print message

自从我上次使用此功能以来,每次调用视图时它都会打印一条消息,因此它肯定会将消息保存在某处。它只是没有发送到模板。

附加信息:

  • Django 版本 = (1, 2, 3, 'final', 0)
  • 我将“django.contrib.messages.context_processors.messages”添加到 TEMPLATE_CONTEXT_PROCESSORS。注意:我没有 TEMPLATE_CONTEXT_PROCESSORS 即使它应该从 Django 1.2 开始就存在,所以我只是添加了它。我猜它可能无法正常工作,这可能是问题所在,但我不知道如何检查它是否配置正确。
  • 我按照https://docs.djangoproject.com/en/dev/ref/contrib/messages/ 进行了设置。

【问题讨论】:

    标签: python django django-templates django-views


    【解决方案1】:

    您需要使用RequestContext 而不仅仅是Contextrender_to_response 默认使用)来呈现模板,以使您的模板上下文处理器在模板中可用。查看optional arguments section of the render_to_response docs 然后更改:

    return render_to_response('base.html', context_instance=RequestContext(request))
    

    【讨论】:

    • 谢谢,这有帮助,但我认为如果我将 'django.contrib.messages.context_processors.messages' 添加到 TEMPLATE_CONTEXT_PROCESSORS 就没有必要了。还是我两个都需要?
    • 将其添加到TEMPLATE_CONTEXT_PROCESSORS 仅表示已启用。您需要在视图中使用 RequestContext 以实际使 TEMPLATE_CONTEXT_PROCESSORS 中使用的所有上下文处理器在您的模板中可用。
    • @Dor 我已经检查了渲染快捷方式并且能够使用它,我必须升级到更新版本的 Django。现在我正在让一切重新开始工作,那么我也许可以使用渲染。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-18
    • 2018-12-11
    • 2015-11-09
    • 2013-06-23
    • 2022-01-03
    相关资源
    最近更新 更多