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