【发布时间】:2015-05-24 11:02:44
【问题描述】:
每当用户在我的网站上发布无效评论(例如空白帖子)时,我一直在尝试显示提醒。我决定使用消息框架,但它似乎不起作用。我已确保应用程序、中间件和模板上下文处理器是正确的,并且我的视图使用的是 RequestContext 对象。如果我在模板中使用{% debug %},我可以看到“消息”变量集,但其中没有任何内容。
settings.py
INSTALLED_APPS = (
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'polls',
)
MIDDLEWARE_CLASSES = (
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
)
TEMPLATE_CONTEXT_PROCESSORS = ("django.contrib.auth.context_processors.auth",
"django.core.context_processors.debug",
"django.core.context_processors.i18n",
"django.core.context_processors.media",
"django.core.context_processors.static",
"django.core.context_processors.tz",
"django.core.context_processors.request",
"django.contrib.messages.context_processors.messages",
)
views.py
def detail(request, question_id):
uid = request.session.get('uid', 0);
q = get_object_or_404(Question, pk=question_id);
context = RequestContext(request, {'question': q, 'uid':uid});
return render(request, 'detail.html', context_instance=context);
def post_comment(request, question_id):
try:
if (request.POST['comment_text'] == ""):
messages.error(request, "Cannot submit an empty comment!");
return HttpResponseRedirect(reverse('detail', kwargs={'question_id': question_id}));
else:
comment = Comment(
question = Question.objects.get(id=question_id),
submitter = request.session['uid'],
text = sanitizer.clean(request.POST['comment_text'])
);
comment.save();
except Exception, e:
raise e;
else:
return HttpResponseRedirect(reverse('detail', kwargs={'question_id': question_id}));
detail.html
{% extends "base.html" %}
{% block content %}
{% if messages %}
<ul class="messages">
{% for m in messages %}
<li{% if m.tags %} class="{{ m.tags }}"{% endif %}>{{ m }}</li>
{% endfor %}
</ul>
{% endif %}
{%endblock%}
【问题讨论】:
-
只是为了确保设置正确,您是否尝试设置一个简单的视图来设置消息并呈现模板以显示消息,而不使用任何条件块或任何东西?您是否使用过调试器(甚至只是打印语句)来确保您点击了
messages.error(request, "Cannot submit an empty comment!");行? -
我试过了,还是不行。是的,我确实打了
messages.error行。 -
默认情况下,消息将使用 cookie 作为存储后端。您的网站有什么可能会影响它吗?您是否尝试设置
MESSAGE_STORAGE = 'django.contrib.messages.storage.session.SessionStorage'只是为了看看这是否会改变什么? -
我可以发誓文档说默认是 Session。那好吧。您的修复工作完美。您能否重新提交您的评论作为答案?