remotes/origin/setup
ArturBaybulatov 10 years ago
parent 61d73035b6
commit c5c94ba6c9
  1. 2
      archilance/management/commands/generate_portfolios.py
  2. 2
      archilance/management/commands/generate_projects.py
  3. 2
      archilance/management/commands/generate_reviews.py
  4. 3
      archilance/management/commands/generate_users.py
  5. 2
      archilance/settings/base.py
  6. 17
      archilance/util.py
  7. 9
      common/utils.py
  8. 1
      projects/templates/customer_project_detail.html
  9. 1
      projects/templates/project_detail.html
  10. 9
      projects/templates/project_filter.html
  11. 6
      specializations/templatetags/specializtions_tags.py
  12. 46
      templates/partials/pagination.html
  13. 23
      users/forms.py
  14. 106
      users/templates/contractor_filter.html
  15. 23
      users/templates/customer_profile_open_projects.html
  16. 2
      users/templates/customer_profile_reviews.html
  17. 17
      users/templates/customer_profile_trashed_projects.html
  18. 11
      users/templates/partials/customer_profile_info_block.html
  19. 1
      users/templatetags/user_tags.py
  20. 115
      users/views.py
  21. 39
      work_sell/templates/worksells_list.html

@ -38,7 +38,7 @@ class Command(BaseCommand):
def create_portfolio(i):
portf = Portfolio(
name='Portforlio %s' % i,
description="Portforlio %s's description" % i,
description=util.lorem(_.random(5, 30)),
budget=util.random_amount(),
currency=_.sample(CURRENCIES)[0],
term=_.random(0, 20),

@ -63,7 +63,7 @@ class Command(BaseCommand):
deal_type=_.sample(Project.DEAL_TYPES)[0],
term=_.random(0, 20),
term_type=_.sample(TERMS)[0],
text='Project %s text' % i,
text=util.lorem(_.random(5, 30)),
work_type=_.sample(Project.WORK_TYPES)[0],
state='active',
)

@ -23,7 +23,7 @@ class Command(BaseCommand):
review.project = Project.objects.order_by('?').first()
review.stars = _.random(1, 5)
review.text = 'This is a review %s text' % i
review.text = util.lorem(_.random(5, 15))
review.is_secured = _.sample((True, False))
review.save()

@ -79,7 +79,8 @@ class Command(BaseCommand):
username = 'user-%s' % i
return User.objects.create(
first_name='User-%s' % i,
first_name='Василий',
last_name='Пупкин',
username=username,
email='%s@example.com' % username,
is_active=True,

@ -240,7 +240,7 @@ REST_FRAMEWORK = {
'rest_framework.permissions.DjangoModelPermissionsOrAnonReadOnly',
],
'PAGE_SIZE': 10,
'PAGE_SIZE': 100,
'DEFAULT_FILTER_BACKENDS': ('rest_framework_filters.backends.DjangoFilterBackend',), # djangorestframework-filters
}

@ -1,3 +1,4 @@
from django.shortcuts import _get_queryset
from django.utils import timezone
from pprint import pprint, pformat
import pydash as _; _.map = _.map_; _.filter = _.filter_
@ -41,6 +42,22 @@ def random_amount():
return random.random() * random.choice((100, 1000, 10000))
def get_or_none(klass, *args, **kwargs):
queryset = _get_queryset(klass)
try:
return queryset.get(*args, **kwargs)
except queryset.model.DoesNotExist:
return None
def get_attr_or_none(klass, *args, attr=None, **kwargs):
object = get_or_none(klass, *args, **kwargs)
if object and attr and isinstance(attr, str):
return getattr(object, attr, None)
def model_fields(model, width=200):
pprint([(
f.name,

@ -1,9 +0,0 @@
from django.shortcuts import _get_queryset
def get_or_none(klass, *args, **kwargs):
queryset = _get_queryset(klass)
try:
return queryset.get(*args, **kwargs)
except queryset.model.DoesNotExist:
return None

@ -201,6 +201,7 @@
</div>
{% endfor %}
</div>
<div class="col-lg-12 pagin">
{% include 'partials/pagination.html' %}
</div>

@ -242,6 +242,7 @@
</div>
{% endfor %}
</div>
<div class="col-lg-12 pagin">
{% include 'partials/pagination.html' %}
</div>

@ -166,9 +166,7 @@
<input type="checkbox" name="{{ form.reverse_order.html_name }}" {% if reverse_order %}checked{% endif %} style="display: none">
</div>
</div>
</form>
@ -235,16 +233,11 @@
</div>
<div class="col-lg-12 pagin">
{% include 'partials/pagination.html' %}
</div>
</form>
{% include 'partials/footer.html' %}
</div>
</div>

@ -1,13 +1,15 @@
from django import template
from common.utils import get_or_none
from archilance import util
from users.models import User
register = template.Library()
@register.inclusion_tag('templatetags/specializations_widget.html', takes_context=True)
def specialization_widget(context, user_id):
user_id = int(user_id)
user = get_or_none(User, pk=user_id)
user = util.get_or_none(User, pk=user_id)
if user:
specializations = user.contractor_specializations.all()
else:

@ -1,29 +1,51 @@
{% if is_paginated %}
<nav>
<ul class="pagination">
{% if page_obj.has_previous %}
<li>
<button type="submit" name="page" value="{{ page_obj.previous_page_number }}">Previous</button>
<a
href="#"
aria-label="Previous"
{% if page_obj.has_previous %}
onclick="paginateTo({{ page_obj.previous_page_number }}); return false"
{% else %}
onclick="return false"
style="cursor: not-allowed"
{% endif %}>
<span class="glyphicon glyphicon-chevron-left" aria-hidden="true"></span>
</a>
</li>
{% endif %}
{% for n in page_obj.paginator.page_range %}
{% if n == page_obj.number %}
<li class="i active">
<button type="submit" name="page" value="{{ n }}" class="i" disabled>{{ n }}</button>
</li>
<li class="active"><a href="#" onclick="return false">{{ n }}</a></li>
{% else %}
<li>
<button type="submit" name="page" value="{{ n }}">{{ n }}</button>
</li>
<li><a href="#" onclick="paginateTo({{ n }}); return false">{{ n }}</a></li>
{% endif %}
{% endfor %}
{% if page_obj.has_next %}
<li>
<button type="submit" name="page" value="{{ page_obj.next_page_number }}">Next</button>
<a
href="#"
aria-label="Next"
{% if page_obj.has_next %}
onclick="paginateTo({{ page_obj.next_page_number }}); return false"
{% else %}
onclick="return false"
style="cursor: not-allowed"
{% endif %}>
<span class="glyphicon glyphicon-chevron-right" aria-hidden="true"></span>
</a>
</li>
{% endif %}
</ul>
</nav>
<script>
function paginateTo(pageNum) {
var urlObj = new URI(location.href)
urlObj.setQuery('page', pageNum)
location.href = urlObj.href()
}
</script>
{% endif %}

@ -1,10 +1,11 @@
from django import forms
from django.forms import ModelForm
import itertools
import pydash as _; _.map = _.map_; _.filter = _.filter_
from .models import User, ContractorFinancialInfo
from common.models import Location
from projects.models import Project, BuildingClassfication, ConstructionType
from projects.models import Project, Realty, BuildingClassfication, ConstructionType
from specializations.models import Specialization
@ -110,6 +111,26 @@ class ContractorFilterForm(forms.Form):
super().__init__(*args, **kwargs)
class CustomerProfileProjectRealtyForm(forms.Form):
def __init__(self, *args, **kwargs):
self.request = kwargs.pop('request')
self.customer = kwargs.pop('customer')
super().__init__(*args, **kwargs)
realties = _.uniq(tuple(p.realty for p in self.customer.projects.all()))
self.fields['realty'] = forms.ChoiceField(
widget=forms.Select(attrs={
'class': 'selectpicker',
'onchange': "$(this).closest('form').submit()",
}),
choices=(('', 'Все объекты'),) + tuple((r.pk, r.name) for r in realties),
required=False,
)
class ContractorFinancicalInfoForm(ModelForm):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)

@ -163,6 +163,7 @@
<input type="checkbox" name="{{ form.reverse_order.html_name }}" {% if reverse_order %}checked{% endif %} style="display: none">
</div>
</div>
</form>
@ -256,42 +257,42 @@
</div>
{% if TEMPLATE_DEBUG %}
<div class="col-lg-12" style="margin-bottom: 20px">
<pre><!--
--><b>######## Team owner #########</b><br><!--
--><br><!--
--><b>Specializations:</b> {{ team.owner.contractor_specializations.all }}<br><!--
--><br><!--
--><b>Location:</b> {{ team.owner.location }}<br><!--
--><br><!--
--><b>Build. classif-s:</b> {% for o in team.owner.orders.all %}{{ o.project.realty.building_classification }}, {% endfor %}<br><!--
--><br><!--
--><b>Constr. types:</b> {% for o in team.owner.orders.all %}{{ o.project.realty.construction_type }}, {% endfor %}<br><!--
--><br><!--
--><b>CRO:</b> {{ team.owner.cro }}<br><!--
--><br><!--
--><b>Work types:</b> {% for o in team.owner.orders.all %}{{ o.project.work_type }}, {% endfor %}<br><!--
--><br><!--
--><br><!--
--><br><!--
--><b>######## Team users #########</b><br><!--
--><br><!--
--><b>Specializations:</b> {% for u in team.users.all %}{{ u.contractor_specializations.all }}, {% endfor %}<br><!--
--><br><!--
--><b>Location:</b> {% for u in team.users.all %}{{ u.location }}, {% endfor %}<br><!--
--><br><!--
--><b>Build. classif-s:</b> {% for u in team.users.all %}{% for o in u.orders.all %}{{ o.project.realty.building_classification }}, {% endfor %}; {% endfor %}<br><!--
--><br><!--
--><b>Constr. types:</b> {% for u in team.users.all %}{% for o in u.orders.all %}{{ o.project.realty.construction_type }}, {% endfor %}; {% endfor %}<br><!--
--><br><!--
--><b>CRO:</b> {% for u in team.users.all %}{{ u.cro }}, {% endfor %}<br><!--
--><br><!--
--><b>Work types:</b> {% for u in team.users.all %}{% for o in u.orders.all %}{{ o.project.work_type }}, {% endfor %}; {% endfor %}<br><!--
--></pre>
</div>
{% endif %}
{# {% if TEMPLATE_DEBUG %}#}
{# <div class="col-lg-12" style="margin-bottom: 20px">#}
{# <pre><!--#}
{# --><b>######## Team owner #########</b><br><!--#}
{# --><br><!--#}
{# --><b>Specializations:</b> {{ team.owner.contractor_specializations.all }}<br><!--#}
{# --><br><!--#}
{# --><b>Location:</b> {{ team.owner.location }}<br><!--#}
{# --><br><!--#}
{# --><b>Build. classif-s:</b> {% for o in team.owner.orders.all %}{{ o.project.realty.building_classification }}, {% endfor %}<br><!--#}
{# --><br><!--#}
{# --><b>Constr. types:</b> {% for o in team.owner.orders.all %}{{ o.project.realty.construction_type }}, {% endfor %}<br><!--#}
{# --><br><!--#}
{# --><b>CRO:</b> {{ team.owner.cro }}<br><!--#}
{# --><br><!--#}
{# --><b>Work types:</b> {% for o in team.owner.orders.all %}{{ o.project.work_type }}, {% endfor %}<br><!--#}
{# --><br><!--#}
{# --><br><!--#}
{# --><br><!--#}
{# --><b>######## Team users #########</b><br><!--#}
{# --><br><!--#}
{# --><b>Specializations:</b> {% for u in team.users.all %}{{ u.contractor_specializations.all }}, {% endfor %}<br><!--#}
{# --><br><!--#}
{# --><b>Location:</b> {% for u in team.users.all %}{{ u.location }}, {% endfor %}<br><!--#}
{# --><br><!--#}
{# --><b>Build. classif-s:</b> {% for u in team.users.all %}{% for o in u.orders.all %}{{ o.project.realty.building_classification }}, {% endfor %}; {% endfor %}<br><!--#}
{# --><br><!--#}
{# --><b>Constr. types:</b> {% for u in team.users.all %}{% for o in u.orders.all %}{{ o.project.realty.construction_type }}, {% endfor %}; {% endfor %}<br><!--#}
{# --><br><!--#}
{# --><b>CRO:</b> {% for u in team.users.all %}{{ u.cro }}, {% endfor %}<br><!--#}
{# --><br><!--#}
{# --><b>Work types:</b> {% for u in team.users.all %}{% for o in u.orders.all %}{{ o.project.work_type }}, {% endfor %}; {% endfor %}<br><!--#}
{# --></pre>#}
{# </div>#}
{# {% endif %}#}
<div class="gallMini disTab">
{% for portf in team.portfolios.all|slice:':4' %}
@ -397,23 +398,23 @@
</div>
{# {% if TEMPLATE_DEBUG %}#}
{# <div class="col-lg-12">#}
{# <pre><!--#}
{# --><b>Specializations:</b> {{ contractor.contractor_specializations.all }}<br><!--#}
{# --><br><!--#}
{# --><b>Location:</b> {{ contractor.location }}<br><!--#}
{# --><br><!--#}
{# --><b>Build. classif-s:</b> {% for o in contractor.orders.all %}{{ o.project.realty.building_classification }}, {% endfor %}<br><!--#}
{# --><br><!--#}
{# --><b>Constr. types:</b> {% for o in contractor.orders.all %}{{ o.project.realty.construction_type }}, {% endfor %}<br><!--#}
{# --><br><!--#}
{# --><b>CRO:</b> {{ contractor.cro }}<br><!--#}
{# --><br><!--#}
{# --><b>Work types:</b> {% for o in contractor.orders.all %}{{ o.project.work_type }}, {% endfor %}<br><!--#}
{# --></pre>#}
{# </div>#}
{# {% endif %}#}
{% if TEMPLATE_DEBUG %}
<div class="col-lg-12">
<pre><!--
--><b>Specializations:</b> {{ contractor.contractor_specializations.all }}<br><!--
--><br><!--
--><b>Location:</b> {{ contractor.location }}<br><!--
--><br><!--
--><b>Build. classif-s:</b> {% for o in contractor.orders.all %}{{ o.project.realty.building_classification }}, {% endfor %}<br><!--
--><br><!--
--><b>Constr. types:</b> {% for o in contractor.orders.all %}{{ o.project.realty.construction_type }}, {% endfor %}<br><!--
--><br><!--
--><b>CRO:</b> {{ contractor.cro }}<br><!--
--><br><!--
--><b>Work types:</b> {% for o in contractor.orders.all %}{{ o.project.work_type }}, {% endfor %}<br><!--
--></pre>
</div>
{% endif %}
<div class="gallMini disTab">
{% for portf in contractor.portfolios.all|slice:':4' %}
@ -437,7 +438,6 @@
<div class="col-lg-12 pagin">
{% include 'partials/pagination.html' %}
</div>
</form>
{% include 'partials/footer.html' %}

@ -1,6 +1,5 @@
{% extends 'partials/base.html' %}
{% load staticfiles %}
{% block content %}
{% include 'partials/header.html' %}
@ -13,22 +12,20 @@
<div class="btn-group valProject2">
<a href="{% url 'users:customer-profile-open-projects' pk=pk %}" class="btn btn-default" disabled>
Открытые проекты
<span><mark>2</mark> / <span>35</span></span>
<span><!--<mark>2</mark> / <span>-->{{ open_project_count }}</span></span>
</a>
<a href="{% url 'users:customer-profile-trashed-projects' pk=pk %}" class="btn btn-default">
Корзина
<span><mark></mark><span>7</span></span>
<span><mark></mark><span>{{ trashed_project_count }}</span></span>
</a>
</div>
<div class="polsF1 disTab polsSearch">
<div class="col-lg-3">
<select class="selectpicker">
<option>Mustard</option>
<option>Ketchup</option>
<option>Relish</option>
</select>
<form action="{% url 'users:customer-profile-open-projects' pk=pk %}" method="GET" novalidate>
{{ form.realty }}
</form>
</div>
</div>
@ -38,6 +35,7 @@
</p>
</div>
</div>
<div class="projectsBlock new-pro-block disTab">
{% for proj in projects %}
<div class="projectPro clearfix">
@ -80,11 +78,10 @@
</li>
<li>
<form action="{% url 'projects:customer-project-trash' pk=proj.pk %}" method="POST">
<form action="{% url 'projects:customer-project-trash' pk=proj.pk %}" method="POST" novalidate>
{% csrf_token %}
<input type="hidden" name="next" value="{{ request.path }}">
<a href='#' onclick="$(this).closest('form').submit(); return false">Переместить в корзину</a>
<a href="#" onclick="$(this).closest('form').submit(); return false">Переместить в корзину</a>
</form>
</li>
</ul>
@ -93,6 +90,10 @@
{% endfor %}
</div>
<div class="col-lg-12 pagin">
{% include 'partials/pagination.html' %}
</div>
{% include 'partials/footer.html' %}
</div>
</div>

@ -35,7 +35,7 @@
{% endif %}
</div>
<p class="textComm44"><b>{{ review.text }}</b>{% if TEMPLATE_DEBUG %}. {% lorem %}{% endif %}</p>
<p class="textComm44">{{ review.text }}</p>
</div>
</div>
{% endfor %}

@ -11,21 +11,19 @@
<div class="btn-group valProject2">
<a href="{% url 'users:customer-profile-open-projects' pk=pk %}" class="btn btn-default">
Открытые проекты
<span><mark>2</mark> / <span>35</span></span>
<span><!--<mark>2</mark> / <span>-->{{ open_project_count }}</span></span>
</a>
<a href="{% url 'users:customer-profile-trashed-projects' pk=pk %}" class="btn btn-default" disabled>
Корзина
<span><mark></mark><span>7</span></span>
<span><mark></mark><span>{{ trashed_project_count }}</span></span>
</a>
</div>
<div class="polsF1 disTab polsSearch">
<div class="col-lg-3">
<select class="selectpicker">
<option>Mustard</option>
<option>Ketchup</option>
<option>Relish</option>
</select>
<form action="{% url 'users:customer-profile-trashed-projects' pk=pk %}" method="GET" novalidate>
{{ form.realty }}
</form>
</div>
</div>
<div class="col-lg-3 col-lg-offset-1">
@ -34,6 +32,7 @@
</p>
</div>
</div>
<div class="projectsBlock new-pro-block disTab">
{% for proj in projects %}
<div class="projectPro clearfix">
@ -95,6 +94,10 @@
{% endfor %}
</div>
<div class="col-lg-12 pagin">
{% include 'partials/pagination.html' %}
</div>
{% include 'partials/footer.html' %}
</div>
</div>

@ -1,4 +1,6 @@
{% load staticfiles %}
{% load projects_tags %}
<div class="col-lg-12">
<div class="col-lg-3 divCol3">
<div class="avatar new-mar">
@ -11,15 +13,14 @@
<div class="col-lg-9 divCol9">
<div class="col-lg-4">
<p class="nameUser">
{{ object.get_full_name }} [ivanov_petr]
{{ customer.get_full_name }} [{{ customer.username }}]
</p>
<p class="cityUser">{{ object.location.name }}</p>
<p class="navv">На сайте {{ object.created }}</p>
<p class="cityUser">{{ customer.location.name }}</p>
<p class="navv">На сайте {{ customer.created }}</p>
</div>
<div class="col-lg-4 new-er">
{% load projects_tags %}
{% ratings_widget customer.pk %}
</div>

@ -7,6 +7,7 @@ def has_group(user, group_name):
groups = user.groups.all().values_list('name', flat=True)
return True if group_name in groups else False
@register.simple_tag
def test():
return 'Hello there'

@ -13,16 +13,23 @@ import itertools
import natsort
import pydash as _; _.map = _.map_; _.filter = _.filter_
from .forms import UserEditForm, ContractorFilterForm, ContractorFinancicalInfoForm
from .mixins import CheckForUserMixin
from .models import User, Team, ContractorFinancialInfo
from archilance import util
from archilance.mixins import BaseMixin
from common.utils import get_or_none
from projects.forms import PortfolioForm
from projects.models import Project
from reviews.models import Review
from specializations.models import Specialization
from work_sell.forms import WorkSellForm
from .forms import (
ContractorFilterForm,
ContractorFinancicalInfoForm,
CustomerProfileProjectRealtyForm,
UserEditForm,
)
def send_mail_test(request):
send_mail('Subject here', 'Here is the message.Mukhtar hello ', '', ['muhtarzubanchi05@gmail.com'], fail_silently=False)
@ -244,26 +251,100 @@ class ContractorOfficeDetailView(DetailView):
context_object_name = 'contractor'
class CustomerProfileOpenProjectsView(BaseMixin, DetailView):
model = User
class CustomerProfileOpenProjectsView(BaseMixin, View):
template_name = 'customer_profile_open_projects.html'
context_object_name = 'customer'
form_class = CustomerProfileProjectRealtyForm
def get_context_data(self, **kwargs):
c = super().get_context_data(**kwargs)
c['projects'] = self.object.projects.filter(state='active')
return c
def get(self, request, *args, **kwargs):
context = self.get_context_data(**_.merge({}, request.GET, kwargs))
customer = get_object_or_404(User.customer_objects, pk=kwargs.get('pk'))
form = self.form_class(request.GET, request=request, customer=customer)
projects = customer.projects.filter(state='active')
if form.is_valid():
realty = form.cleaned_data.get('realty')
class CustomerProfileTrashedProjectsView(BaseMixin, DetailView):
model = User
if realty:
projects = projects.filter(realty=realty)
else:
if form.errors:
messages.info(request, (
'<p>Произошла ошибка (form)</p>'
'<pre>{form}</pre>'
).format(form=pformat(form.errors)))
paginator = Paginator(projects, settings.PAGE_SIZE)
page = request.GET.get('page')
try:
projects = paginator.page(page)
except PageNotAnInteger:
projects = paginator.page(1)
except EmptyPage:
projects = paginator.page(paginator.num_pages)
context.update({
'form': form,
'projects': projects,
'customer': customer,
'open_project_count': projects.paginator.count,
'trashed_project_count': customer.projects.filter(state='trashed').count(),
'is_paginated': True,
'page_obj': projects,
})
return render(request, self.template_name, context)
class CustomerProfileTrashedProjectsView(BaseMixin, View):
template_name = 'customer_profile_trashed_projects.html'
context_object_name = 'customer'
form_class = CustomerProfileProjectRealtyForm
def get_context_data(self, **kwargs):
c = super().get_context_data(**kwargs)
c['projects'] = self.object.projects.filter(state='trashed')
return c
def get(self, request, *args, **kwargs):
context = self.get_context_data(**_.merge({}, request.GET, kwargs))
customer = get_object_or_404(User.customer_objects, pk=kwargs.get('pk'))
form = self.form_class(request.GET, request=request, customer=customer)
projects = customer.projects.filter(state='trashed')
if form.is_valid():
realty = form.cleaned_data.get('realty')
if realty:
projects = projects.filter(realty=realty)
else:
if form.errors:
messages.info(request, (
'<p>Произошла ошибка (form)</p>'
'<pre>{form}</pre>'
).format(form=pformat(form.errors)))
paginator = Paginator(projects, settings.PAGE_SIZE)
page = request.GET.get('page')
try:
projects = paginator.page(page)
except PageNotAnInteger:
projects = paginator.page(1)
except EmptyPage:
projects = paginator.page(paginator.num_pages)
context.update({
'form': form,
'projects': projects,
'customer': customer,
'open_project_count': customer.projects.filter(state='active').count(),
'trashed_project_count': projects.paginator.count,
'is_paginated': True,
'page_obj': projects,
})
return render(request, self.template_name, context)
class CustomerProfileCurrentProjectsView(BaseMixin, DetailView):
@ -319,7 +400,7 @@ class ContractorProfileEditView(CheckForUserMixin, View):
def get(self, request, *args, **kwargs):
instance = get_object_or_404(User, pk=request.user.pk)
form = self.form_class(instance=instance)
root = get_or_none(Specialization, name='_root')
root = util.get_or_none(Specialization, name='_root')
nodes = root.get_descendants('lft')
return render(request, self.template_name, {'form': form, 'nodes': nodes})

@ -1,8 +1,10 @@
{% extends 'partials/base.html' %}
{% load staticfiles %}
{% load thumbnail %}
{% block content %}
{% include 'partials/header.html' %}
<div class="container mainScore">
<div class="row">
@ -108,6 +110,8 @@
</div>
</div>
</div>
</form>
<div class="galleryWork disTab">
{% for work in object_list %}
@ -147,44 +151,9 @@
</div>
{# {% if is_paginated %}#}
{# <div class="col-lg-12 pagin">#}
{# <nav>#}
{# <ul class="pagination">#}
{# {% if page_obj.has_previous %}#}
{# <li>#}
{# <a href="?page={{ page_obj.previous_page_number }}" aria-label="Previous">#}
{# <span class="glyphicon glyphicon-chevron-left" aria-hidden="true"></span>#}
{# </a>#}
{# </li>#}
{# {% endif %}#}
{# {% for page_number in paginator.page_range %}#}
{# {% if page_number == page_obj.number %}#}
{# <li class="active"><a href="#">{{ page_number }}</a></li>#}
{# {% else %}#}
{# <li><a href="?page={{ page_number }}">{{ page_number }}</a></li>#}
{# {% endif %}#}
{# {% endfor %}#}
{# #}
{# {% if page_obj.has_next %}#}
{# <li>#}
{# <a href="?page={{ page_obj.next_page_number }}" aria-label="Next">#}
{# <span class="glyphicon glyphicon-chevron-right" aria-hidden="true"></span>#}
{# </a>#}
{# </li>#}
{# {% endif %}#}
{# </ul>#}
{# </nav>#}
{# </div>#}
{# {% endif %}#}
<div class="col-lg-12 pagin">
{% include 'partials/pagination.html' %}
</div>
</form>
{% include 'partials/footer.html' %}

Loading…
Cancel
Save