顯示的信息在這裏是爲您的難題,Django的消息傳遞框架,儘管沒有RequestContext的
使用Django 1.4,我不能獲得通過消息中間件設置在我的模板,以顯示消息。我梳理了Django docs,並確保我的settings.py文件引用了相關的應用程序,上下文處理器和中間件。 我已經確保我的視圖是使用RequestContext實例呈現的。但是,我仍然無法獲得任何消息出現在模板中。
settings.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)
...它產生可能是消息對象的方法/屬性列表。然而,我無法重複這一點,因爲「對於消息中的m而言:」甚至不會運行一次。試圖通過以下方式發現此實體的大小:
print(len(context[self.messages]))
在控制檯中沒有提供任何內容。
唯一一次我得到它實際輸出的東西是當我手動將消息對象傳遞到render_to_response標記中的模板然後通過messages.error({%for msg in messages.error%})迭代在正確的div中產生了兩個項目符號:第一個項目填充了var dump:「,POST :, COOKIES:{'csrftoken':」...第二個項目符號包含最後一個錯誤信息:「爲什麼這件事情不會起作用嗎?「 (顯然,這只是一個測試,我沒有保留通過render_to_response傳遞的字典中的消息,因爲我知道它應該通過上下文到達模板中)
那麼,我出錯了?
爲什麼在我的模板中看不到我的錯誤消息?爲什麼我甚至不能讓消息出現在控制檯中?
任何一個比我聰明的人都可以擺脫燈光會非常有幫助!
我能說什麼?發現得好!有一個綠色的勾號! 大概不像信息本身那麼奇怪...... – michaeljtbrooks 2012-07-30 19:54:12