2016-02-23 13 views
2

我有一個名爲dashboard的應用程序,在這裏我將所有登錄的用戶重定向到用戶添加項目的選項。如何在模板中刪除會話變量在django中完成作業

用戶點擊的形式提交按鈕後,將數據通過POST發送到/dashboard/article/save URL和數據被存儲之後,該視圖返回到HttpResponseRedirectshow_dashboard這使得dashboard.html與會話變量result

在儀表板模板文件中,我添加了一個notify.js代碼來向用戶顯示確認。問題是,如果定義了此會話變量,則每次顯示儀表板頁面時,如果用戶沒有添加項目,則會觸發通知。

(我是新來使用Web框架,所以我不知道這一切是如何工作正常)

一些代碼:

儀表板/ models.py:

class Article(models.Model): 

    id = models.IntegerField(primary_key=True) 
    ar_title = models.CharField(max_length=25) 
    ar_data = models.CharField(max_length=500) 
    user = models.ForeignKey(User,on_delete=models.CASCADE) 

    def getArticleTitle(self): 
     return self.title 

    def getArticleData(self): 
     return self.title 

    def getArticleAuthor(self): 
     return self.user 

dashboard/urls.py:

urlpatterns = [ 
    url(r'^$', views.show_dashboard,name='home_dashboard'), 
    url(r'^profile/save/', views.save_profile,name="save_profile"), 
    url(r'^newsfeed/', views.get_newsfeed,name="newsfeed",), 
    url(r'^profile/', views.show_profile,name="show_profile"), 
    url(r'^article/save/', views.add_new_article,name="add_new_article"), 
] 

儀表板/ views.py:

@login_required 
def show_dashboard(request): 
    return render(request,'dashboard/dashboard.html',{'form':NewArticleForm()}) 

def add_new_article(request): 
    if(request.method == 'POST'): 
     ar_title= request.POST['ar_title'] 
     ar_data = request.POST['ar_data'] 
     user = request.user 
     form = NewArticleForm(request.POST) 
     if(form.is_valid()): 
      Article.objects.create(ar_title=ar_title,ar_data=ar_data,user=user) 
      request.session["result"] = "add_article_OK" 
      return HttpResponseRedirect(reverse('home_dashboard')) 

dashboard.html:

{% ifequal request.session.result 'add_article_OK' %} 
    <script> 
     $.notify("New article added successfully", 
      {position:"bottom right","className":"success","autoHide":"yes","autoHideDelay":"3000"}); 
    </script> 
{% endifequal %} 

現在,我怎麼刪除此會話值已顯示的消息後?我知道del request.session['result']可以發行,但我可以把它放在這一系列的動作中?

回答

1

show_dashboard視圖中執行此操作。

不是從模板中的會話中獲取值,而是將其彈出到視圖中並將其傳遞給模板;這樣你就可以一口氣處理和清理它。

@login_required 
def show_dashboard(request): 
    context = { 
     'form': NewArticleForm(), 
     'result': request.session.pop('result', None) 
    } 
    return render(request,'dashboard/dashboard.html',context) 

... 
{% ifequal result 'add_article_OK' %}