gpt4 book ai didi

尽管 RequestContext,Django 消息传递框架不显示消息

转载 作者:行者123 更新时间:2023-12-01 12:51:58 25 4
gpt4 key购买 nike

这是一个难题,

使用 Django 1.4,我无法通过消息中间件设置消息以显示在我的模板中。我梳理了Django docs并确保我的 settings.py 文件引用了相关的应用程序、上下文处理器和中间件。 我已确保我的 View 使用 RequestContext 实例呈现。但是,我仍然无法让任何消息显示在模板中。

设置.py:

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',
)
...
TEMPLATE_CONTEXT_PROCESSORS = (
'django.contrib.auth.context_processors.auth',
'django.core.context_processors.debug',
'django.core.context_processors.i18n',
'django.core.context_processors.request',
'django.core.context_processors.media',
'django.core.context_processors.static',
'django.contrib.messages.context_processors.messages',
'tekextensions.context_processors.admin_media_prefix',
)
...
INSTALLED_APPS = (
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.sites',
'django.contrib.messages',
'django.contrib.staticfiles',
'django.contrib.admin', #Admin interface
'django.contrib.admindocs', #Admin docs
...

我的消息 error_level 设置为 20(即“信息”及以上)。我正在使用默认映射。

views.py:

from django.contrib import messages

def index(request, *args, **kwargs):
#Do some funky jazz which works like build the timeline & page vars
...
messages.error = (request,"Horsey Bollox!")
messages.add_message = (request, messages.ERROR,"Why won't this f***ing thing work?") #Attempting alternate method
return render_to_response('funkyjazzdirectory/index.html',
{
'page': page,
'timeline': timeline,
},
context_instance=RequestContext(request))

模板:(funkyjazzdirectory/index.html)

{% extends "base.html" %}
{% if messages.error %}
<div class="messages-errors">
Error:
<ul>
{% for msg in messages %}
<li>{{msg}}</li>
{% endfor %}
</ul>
</div>
{% endif %}
<p>
Other stuff such as iterating through {{timeline}} which renders absolutely fine
</p>

我也试过将 {{msg}} 替换为:

<li>{{msg.message}}</li>

没有成功。

页面的其余部分输出正常,Django 不会抛出错误。控制台没有任何异常。生成的 HTML 代码不包含 div,也不包含列表标签。这个扩展的模板 (base.html) 不使用 {{messages}} 变量,也不调用使用它的模板标签。

我尝试将 {{messages}} 传递到自定义模板标签中,以便在 index.html 模板顶部进行测试。在这里我可以做:

def __init__(self, messages):
self.messages = messages
def render(self, context):
l = dir(context[self.messages])
print(l)

...这会生成一个可能属于消息对象的方法/属性列表。然而,我根本无法对此进行迭代,因为“for m in messages:”甚至一次都没有运行。尝试通过以下方式发现此实体的大小:

print(len(context[self.messages]))

在控制台中没有给我任何信息。

我唯一一次实际输出任何东西是当我手动将消息对象传递到 render_to_response 标记内的模板然后迭代 messages.error ({% for msg in messages.error %}) 产生正确的 div 中的两个要点:第一个填充了看起来像 var 转储的内容:", POST:, COOKIES:{'csrftoken':"... 第二个要点仅包含最后一条错误消息:"Why won这该死的东西行得通吗?”。 (显然这只是一个测试,我没有在通过 render_to_response 传递的字典中保留消息,因为我知道它应该通过上下文到达模板)

那么,我哪里出错了?

为什么我在模板中看不到错误消息?为什么我什至无法让消息显示在控制台中?

任何比我更聪明的人可以发出的光都会非常有帮助!

最佳答案

你似乎使用了一种很奇怪的方式来添加消息:

messages.error = (request,"Horsey Bollox!")
messages.add_message = (request, messages.ERROR,"Why won't this f***ing thing work?")

正确的语法是:

messages.error(request,"Horsey Bollox!")
messages.add_message(request, messages.ERROR,"Why won't this f***ing thing work?")

但是设置和模板都很好。

关于尽管 RequestContext,Django 消息传递框架不显示消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11728282/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com