Django의 ListView 세부 사용법(페이지별 paginate 기능 포함)

2665 단어
개발 환경:
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_list뿐만 아니라 현재 로그인한 사용자의 상세한 정보를 얻으려면 어떻게 해야 합니까?코드는 다음과 같습니다.
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
나는 카드카드가 모든 데이터를 앞쪽 페이지에 되돌려 주었는데, 앞쪽은 페이지를 나누어 보여주는 것이 가장 좋은데, 이걸 어떻게 하지?빅영소역(bigyoung.cn)에 오신 것을 환영합니다.
본문 은 빅 영 역 에서 발간 되었다

좋은 웹페이지 즐겨찾기