2017-07-06 46 views
2

所以我有一個關於會話密鑰的問題,通常當用戶第一次訪問網站時會話密鑰不存在,因此您必須設置默認值。Django會話設置默認密鑰用法

set_date = request.session.get('set_date', '2017-07-06') 

我使用會話來存儲給定日期的用戶並在不同的視圖中使用此日期。下面的代碼幾乎完全符合我的要求,至少沒有默認設置。當我爲'set_date'設置一個默認值時,我似乎無法在不同的視圖中使用日期,一旦我切換視圖默認值被重新設置。

將默認設置爲'set_date'的正確方法是什麼?

views.py 

""" 
Check-ins listview 
""" 

from .forms import DateSelection  

class CheckInsListView(generic.ListView, FormMixin): 
    form_class = DateSelection 
    model = Delivery 
    paginate_by = 10 
    queryset = Delivery.objects.filter(status='AR') 
    template_name = 'check-ins.html' 

    """ 
    Save the user given date in a session key set_date 
    """ 

    def get_context_data(self, *args, **kwargs): 
     context = super(CheckInsListView, self).get_context_data(*args, **kwargs) 
     user_date = self.request.GET.get("date_selection") 

     if user_date: # If user enters date 
      self.request.session['set_date'] = user_date # Save given date in session 
      context ['set_date'] = self.request.session['set_date'] # Sent date to context 

     else: 
      context ['set_date'] = self.request.session['set_date'] # Use date from session 

     return context 

    """ 
    Use the date from session to filter the query results 
    """ 

    def get_queryset(self): 
     queryset = super(CheckInsListView, self).get_queryset() 

     user_date = self.request.GET.get('date_selection') 
     session_date = self.request.session['set_date'] 

     if user_date: 
      return queryset.filter(arrival_date__icontains=user_date) # Filter on user given date 

     else: 
      return queryset.filter(arrival_date__icontains=session_date) # Filter on date from session 

     return queryset # Return queryset without filter 

在此先感謝!

回答

1

在你的問題中,你提到了get,如果該鍵不存在但是不設置默認值,它將返回一個默認值。

使用setdefault設置鍵不存在時的默認值。

set_date = request.session.setdefault('set_date', '2017-07-06') 
+1

那麼我不能接受你的答案,但它的作品!一直盯着它,謝謝你的快速回復! –