--- title: \[Django] - 玖-2、search_history view tags: webdevelopment --- 本篇來完成search_history view 打開views.py輸入下面的程式碼 檢查使用者是否登入 若未登入則跳轉至登入頁面 若登入則取得該使用者曾經搜尋過的域名,並渲染到search_history的頁面 ```code=python # search_history view def search_history(request): # 檢查使用者是否登入 if request.user.is_authenticated: # 取得該使用者的域名物件 domain_obj = Domain.objects.filter(user=request.user) for obj in domain_obj: print(obj.domain) # 渲染到search_history.html return render(request, 'ranking/search_history.html', context={'search_history':domain_obj}) else: return HttpResponseRedirect("login") ``` 大家應該還記得,為了紀錄各域名和各關鍵字的名次,我們額外規劃了兩個頁面 keyword_history以及rank_history 這邊一併把他們完成 ```code=python # keyword_history view # 需要把從search_history收到的域名傳到這裡 # 可以去search_history.html中找到url的地方,domain_name由那邊傳出 def keyword_history(request, domain): i = 0 # 獲取使用者想看的域名 domain_obj = Domain.objects.filter(user=request.user, domain=domain).prefetch_related("keywords") keywords_list = [] print(domain_obj) for D_obj in domain_obj: # 獲取關鍵字並把它們都存到列表中 print(f"{i}: {D_obj}") keyword_obj = D_obj.keywords.all() i+=1 for K_obj in keyword_obj: keywords_list.append(K_obj.keyword) print(keywords_list) # 把從資料庫獲取的的資料選染到keyword_history.html return render(request, 'ranking/keyword_history.html', context={"keywords_list":keywords_list, "domain":domain}) ``` rank_history view ```code=python # rank_history view def rank_history(request, domain, keyword): print(f"Domain name: {domain}") print(f"Keyword name: {keyword}") domain_obj = Domain.objects.filter(user=request.user, domain=domain).prefetch_related("keywords__rank_history") rank_list = [] for D_obj in domain_obj: for K_obj in D_obj.keywords.filter(keyword=keyword): # 按照建立日期排序 for R_obj in K_obj.rank_history.order_by("-created_at"): rank_list.append(R_obj.rank) print(rank_list) return render(request, 'ranking/rank_history.html', context={"rank_list":rank_list, "keyword":keyword, "domain":domain}) ``` 完成之後,就等我們把登入和註冊頁面完成再一起測試啦~ 謝謝大家的收看! 如果有任何想法或是問題歡迎寄信到 chantinghsien@gmail.com 可以一起討論和分享新知