Python Django 1.6-未显示消息
我试图让django中的消息框架工作 下面是我设置的有趣部分Python Django 1.6-未显示消息,python,django,django-messages,Python,Django,Django Messages,我试图让django中的消息框架工作 下面是我设置的有趣部分 INSTALLED_APPS = ( 'django.contrib.sessions', 'django.contrib.messages', ) MIDDLEWARE_CLASSES = ( 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.common.CommonMiddleware',
INSTALLED_APPS = (
'django.contrib.sessions',
'django.contrib.messages',
)
MIDDLEWARE_CLASSES = (
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
'django.contrib.flatpages.middleware.FlatpageFallbackMiddleware',
)
我没有向模板\u上下文\u处理器添加任何内容,因此它是默认值
我的视图,我希望消息在其中显示:
from django.contrib.messages import get_messages
class ProfileFrontpage(TemplateView):
def get(self, request, *args, **kwargs):
if request.user.is_authenticated():
#Get messages
messages = get_messages(request)
#Get the user
user = self.request.user
#Used benefit
used_benefit_list = Benefit.published.filter(used_benefit__user = user)
return render(request, "accounts/frontpage.html", {"messages": messages, "used_benefit_list": used_benefit_list})
else:
return render(request, 'accounts/not_authenticated.html')
模板:
{% if messages %}
{% for message in messages %}
<div class="alert {{ message.tags }}">
<button type="button" class="close" data-dismiss="alert" aria-hidden="true">×</button>
{{ message }}
</div>
{% endfor %}
{% endif %}
有人知道消息不可见的原因吗?模板上下文处理器设置包括消息上下文处理器。因此,您不需要在视图中执行获取消息(请求)
。事实上,在您的情况下这是有害的:调用get_messages()
获取消息并清除消息存储。然后,上下文处理器尝试执行相同的操作,但找不到,因为您的视图清除了它们。然后在模板上下文中设置消息
键,并覆盖视图中的值
简而言之:从您的ProfileFrontpage
视图中删除消息处理功能,它应该可以正常工作。我在视图中添加了“get_messages()”,但消息没有显示出来。删除我的“ProfileFrontpage”视图中的代码并重新启动我的服务器,没有任何区别。消息不显示。请务必删除get\u消息。模板的其余部分看起来如何?消息是否在基本模板中输出?如果不是,它是否在块内?我在子模板的块内有消息,但将其移出base.html模板,而不是块内。仍然没有消息。如果将{%debug%}
放入模板(或使用django调试工具栏检查模板上下文),它是否会输出消息
键?
def show_profileform(request):
if request.user.is_authenticated():
user = request.user
ProfileFormInlineFormSet = inlineformset_factory(User, Profile, form=ProfileForm, can_delete=False)
if request.method == "POST":
form = UserForm(request.POST, request.FILES, instance=request.user, prefix="main")
formset = ProfileFormInlineFormSet(request.POST, request.FILES, instance=request.user, prefix="nested")
if 'submit' in request.POST:
if form.is_valid() and formset.is_valid():
u = User.objects.get(username = request.user)
#Save to database
user = form.save()
profile = formset.save()
messages.success(request, "Settings updated", extra_tags='alert-success')
return HttpResponseRedirect('/accounts/')
else:
form = UserForm(instance=request.user, prefix="main")
formset = ProfileFormInlineFormSet(instance=request.user, prefix="nested")
return render(request, "accounts/form.html", {"form":form, "formset":formset})
else:
return render(request, 'accounts/not_authenticated.html')