You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

46 lines
1.6 KiB

from django.http import JsonResponse
from django.views.generic import ListView
from django.template import loader
from .models import Course
from .filters import CourseFilter
class CoursesView(ListView):
model = Course
context_object_name = 'course_items'
paginate_by = 6
def get(self, request, *args, **kwargs):
self.object_list = self.get_queryset()
allow_empty = self.get_allow_empty()
if request.is_ajax():
context = self.get_context_data()
template_name = self.get_template_names()
html = loader.render_to_string(template_name, context)
is_paginated = context.get('is_paginated')
if is_paginated:
page_obj = context.get('page_obj')
prev_url = request.path + '?page=' + str(page_obj.previous_page_number()) if page_obj.has_previous() else None
next_url = request.path + '?page=' + str(page_obj.next_page_number()) if page_obj.has_next() else None
else:
prev_url = None
next_url = None
return JsonResponse({
'success': True,
'content': html,
'prev_url': prev_url,
'next_url': next_url,
})
else:
return super().get(request, args, kwargs)
def get_queryset(self):
queryset = super().get_queryset()
filtered = CourseFilter(self.request.GET, queryset=queryset)
return filtered.qs
def get_template_names(self):
if self.request.is_ajax():
return 'course/course_items.html'
return 'course/courses.html'