diff --git a/devapp/templates/devapp/devices.html b/devapp/templates/devapp/devices.html index e9a8068..bcb692b 100644 --- a/devapp/templates/devapp/devices.html +++ b/devapp/templates/devapp/devices.html @@ -96,6 +96,6 @@ - {% include 'toolbar_page_cbv.html' %} + {% include 'pagination.html' %} {% endblock %} diff --git a/docs/views.md b/docs/views.md index f1e6bf7..cdf902e 100644 --- a/docs/views.md +++ b/docs/views.md @@ -9,7 +9,7 @@ ### Пагинатор Есть реализованный шаблон для пагинации. При использовании [Class Based View](https://docs.djangoproject.com/en/1.11/topics/class-based-views/), -в шаблоне вы можете включить страницу *templates/toolbar_page_cbv.html*. +в шаблоне вы можете включить страницу *templates/pagination.html*. Например вы создали клас представления: diff --git a/taskapp/templates/taskapp/tasklist.html b/taskapp/templates/taskapp/tasklist.html index 9568e15..40bec8b 100644 --- a/taskapp/templates/taskapp/tasklist.html +++ b/taskapp/templates/taskapp/tasklist.html @@ -84,6 +84,6 @@ - {% include 'toolbar_page.html' with pag=tasks %} + {% include 'pagination.html' %} {% endblock %} diff --git a/taskapp/templates/taskapp/tasklist_failed.html b/taskapp/templates/taskapp/tasklist_failed.html index 5e0f8aa..65d156f 100644 --- a/taskapp/templates/taskapp/tasklist_failed.html +++ b/taskapp/templates/taskapp/tasklist_failed.html @@ -17,6 +17,7 @@ + {% with has_change_task=perms.taskapp.change_task %} {% for task in tasks %} {% if task.is_relevant %} @@ -53,7 +54,7 @@ - {% if perms.taskapp.change_task %} + {% if has_change_task %} @@ -65,6 +66,7 @@ {% trans 'The list is empty' %} {% endfor %} + {% endwith %} @@ -76,6 +78,6 @@ - {% include 'toolbar_page.html' with pag=tasks %} + {% include 'pagination.html' %} {% endblock %} diff --git a/taskapp/urls.py b/taskapp/urls.py index 2e1c0fb..802a4fe 100644 --- a/taskapp/urls.py +++ b/taskapp/urls.py @@ -7,7 +7,7 @@ app_name = 'taskapp' urlpatterns = [ - url(r'^$', views.home, name='home'), + url(r'^$', views.NewTasksView.as_view(), name='home'), url(r'^(?P\d+)$', views.view, name='view'), url(r'^(?P\d+)/edit$', views.task_add_edit, name='edit'), url(r'^(?P\d+)/delete$', views.task_delete, name='delete'), @@ -15,7 +15,7 @@ urlpatterns = [ url(r'^(?P\d+)/fail$', views.task_failed, name='fail'), url(r'^(?P\d+)/remind', views.remind, name='remind'), url(r'^add$', views.task_add_edit, name='add'), - url(r'^failed$', views.failed_tasks, name='failed_tasks'), + url(r'^failed$', views.FailedTasksView.as_view(), name='failed_tasks'), url(r'^finished$', views.finished_tasks, name='finished_tasks'), url(r'^own$', views.own_tasks, name='own_tasks'), url(r'^my$', views.my_tasks, name='my_tasks'), diff --git a/taskapp/views.py b/taskapp/views.py index f579978..bef4f0e 100644 --- a/taskapp/views.py +++ b/taskapp/views.py @@ -5,36 +5,48 @@ from django.core.exceptions import PermissionDenied from django.http import HttpResponse from django.shortcuts import render, redirect, get_object_or_404 from django.contrib import messages -from abonapp.models import Abon +from django.utils.decorators import method_decorator +from django.views.generic import ListView from django.utils.translation import ugettext as _ -from datetime import date, datetime +from django.conf import settings + +from datetime import datetime from guardian.decorators import permission_required_or_403 as permission_required from chatbot.models import MessageQueue - +from abonapp.models import Abon from .handle import TaskException from .models import Task from mydefs import pag_mn, only_admins, safe_int, MultipleException, RuTimedelta from .forms import TaskFrm -@login_required -@only_admins -def home(request): - tasks = Task.objects.filter(recipients=request.user, state='S') # Новые задачи - tasks = pag_mn(request, tasks) - return render(request, 'taskapp/tasklist.html', { - 'tasks': tasks - }) +class BaseTaskListView(ListView): + http_method_names = ['get'] + paginate_by = getattr(settings, 'PAGINATION_ITEMS_PER_PAGE', 10) -@login_required -@only_admins -def failed_tasks(request): - tasks = Task.objects.filter(recipients=request.user, state='C') # Проваленные - tasks = pag_mn(request, tasks) - return render(request, 'taskapp/tasklist_failed.html', { - 'tasks': tasks - }) +@method_decorator([login_required, only_admins], name='dispatch') +class NewTasksView(BaseTaskListView): + """ + Show new tasks + """ + template_name = 'taskapp/tasklist.html' + context_object_name = 'tasks' + + def get_queryset(self): + return Task.objects.filter(recipients=self.request.user, state='S') + + +@method_decorator([login_required, only_admins], name='dispatch') +class FailedTasksView(BaseTaskListView): + """ + Show crashed tasks + """ + template_name = 'taskapp/tasklist_failed.html' + context_object_name = 'tasks' + + def get_queryset(self): + return Task.objects.filter(recipients=self.request.user, state='C') @login_required diff --git a/templates/toolbar_page_cbv.html b/templates/pagination.html similarity index 100% rename from templates/toolbar_page_cbv.html rename to templates/pagination.html