DjangoのListViewの超詳細な使い方(改ページpagiteを含む)


開発環境:
  • python 3.6
  • django 1.11
  • シーン1
    データベースから多くのデータを取得して、フロントエンドにリスト形式で表示されます。例えば、すべてのユーザを取得し、ユーザーリストページに表示されます。
    ソリューション
    一般的な書き方は、DjangoのORMですべてのデータを調べて見せます。コードは以下の通りです。
    
    def user_list(request):
      """  UserProfile      """
      users = UserProfile.objects.all()
      return render(request, 'talks/users_list.html', context={"user_list": users})
    
    このように問題を解決することができますが、Djangoはこのような常用シーンに対して、より速くて便利な方法を提供しています。それはListViewです。使い方は以下の通りです。
    
    from django.views.generic import ListView
    
    class UsersView(ListView):
    
      model = UserProfile
      template_name = 'talks/users_list.html'
      context_object_name = 'user_list'
    
    
    これで上の機能を完成しました。コードはとても簡潔です。
    シーン2:
    データをフィルタしたいですが、ListViewはどうやって実現しますか?コードは以下の通りです
    
    from django.views.generic import ListView
    
    class UsersView(ListView):
    
      model = UserProfile
      template_name = 'talks/users_list.html'
      context_object_name = 'user_list'
      
      def get_queryset(self): #   get_queryset  
      #     is_deleted False   ,           
      return UserProfile.objects.filter(is_deleted=False).order_by('-create_time')
    
    
    データに対してもっと次元のフィルタリングをするなら、例えば、ユーザーはある部門のものであり、性別が男性である場合には、Djangoが提供するQ関数を使って実現することができます。
    シーン3
    Templateに戻るデータは複数必要です。user_uだけではありません。リストは、他のデータがあるかもしれません。現在ログインしているユーザの詳細情報を取得する場合、どうやって操作しますか?コードは以下の通りです
    
    from django.views.generic import ListView
    
    class UsersView(ListView):
    
      model = UserProfile
      template_name = 'talks/users_list.html'
      context_object_name = 'user_list'
    
      def get_context_data(self, **kwargs):  #   get_context_data  
        #    ,           
        context = super().get_context_data(**kwargs)
        username = self.request.GET.get('user', None)
        context['user'] = UserProfile.objects.get(username=username
        return context
    このように、あなたがTemplateページに戻る時、contextは「'user_」に含まれます。list':user_list,'user':user'。
    シーン4
    インターフェースの要求方式を制限したいです。例えば、制限はGETのみでアクセスできます。コードは以下の通りです。
    
    from django.views.generic import ListView
    
    class UsersView(ListView):
    
      model = UserProfile
      template_name = 'talks/users_list.html'
      context_object_name = 'user_list'
      http_method_names = ['GET'] #      ,          
    
    
    
    シーン5
    カードのカードはすべてのデータを元のページに戻しましたが、前のページの中で一番いいのは改ページ展示です。どうすればいいですか?
    ここで、DjangoのListViewの超詳細な使い方について紹介します。これはDjangoのListViewの使い方についてです。以前の文章を検索したり、次の関連記事を見たりしてください。これからもよろしくお願いします。