2014-01-10 56 views
1

我試圖讓django中的消息框架工作。Django 1.6 - 消息沒有顯示

這裏是我還沒有添加任何東西TEMPLATE_CONTEXT_PROCESSORS我settings.py

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', 
) 

有趣的位,所以它是默認值。

我的看法,我想要的消息顯示:

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">&times;</button> 
       {{ message }} 
      </div> 
     {% endfor %} 
{% endif %} 

這裏是我的形式時,形式是有效的應該創建一個消息:

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') 

任何人都知道爲什麼消息不可見?

回答

1

TEMPLATE_CONTEXT_PROCESSORS設置by default包括消息上下文過程。所以你不需要在你看來做get_messages(request)。事實上,這對你的情況是有害的:get_messages()的呼叫獲取消息並清除消息存儲。然後,上下文處理器試圖做同樣的事情,但沒有找到,因爲你的視圖清除了它們。然後繼續在模板上下文中設置messages鍵並覆蓋視圖中的值。

總之:刪除處理從您的ProfileFrontpage視圖的消息,它應該只是工作。

+0

當消息沒有顯示時,我將'get_messages()'添加到了我的視圖中。刪除我的'ProfileFrontpage'視圖中的代碼並重新啓動我的服務器,沒有任何區別。該消息不顯示。 –

+0

絕對保留'get_message'去除。模板的其餘部分是怎樣的?是基本模板中的消息輸出?如果不是,它是在一個塊內? – sk1p

+0

我有一個子模板中的塊內的消息,但將其移出到base.html模板,而不是在塊內。仍然沒有消息。 –