Major improvements to pagination, modals and people listing

This commit is contained in:
Tom Price
2014-11-04 02:44:11 +00:00
parent 13c4bc34be
commit df63d8d0de
10 changed files with 267 additions and 33 deletions

2
.idea/PyRIGS.iml generated
View File

@@ -11,7 +11,7 @@
</component>
<component name="NewModuleRootManager">
<content url="file://$MODULE_DIR$" />
<orderEntry type="jdk" jdkName="Python 2.7.6 virtualenv at D:\Users\Ghost\.virtualenvs\pyrigs" jdkType="Python SDK" />
<orderEntry type="jdk" jdkName="Python 3.3.3 virtualenv at D:\Users\Ghost\.virtualenvs\pyrigs" jdkType="Python SDK" />
<orderEntry type="sourceFolder" forTests="false" />
<orderEntry type="library" name="sass-stdlib" level="application" />
</component>

159
.idea/dataSources.ids generated
View File

@@ -1,6 +1,163 @@
<?xml version="1.0" encoding="UTF-8"?>
<component name="dataSourceStorage">
<data-source source="LOCAL" name="Django default" uuid="09730cb6-cd27-4034-9959-d242e7905a51">
<database-info product="" version="" jdbc-version="" driver-name="" driver-version=""/>
<database-info product="SQLite" version="3.7.6.3" jdbc-version="2.1" driver-name="SQLiteJDBC" driver-version="native"/>
<case-sensitivity plain-identifiers="mixed" quoted-identifiers="mixed"/>
<schema name="" catalog=""/>
<table name="RIGS_person" schema="" catalog="" type="TABLE">
<column name="id" sqlType="INTEGER" precision="2000000000" scale="10" nullable="false" jdbcType="4"/>
<column name="name" sqlType="VARCHAR(50)" precision="2000000000" scale="10" nullable="false" jdbcType="12"/>
<column name="phone" sqlType="VARCHAR(15)" precision="2000000000" scale="10" nullable="true" jdbcType="12"/>
<column name="email" sqlType="VARCHAR(75)" precision="2000000000" scale="10" nullable="true" jdbcType="12"/>
<column name="address" sqlType="TEXT" precision="2000000000" scale="10" nullable="true" jdbcType="12"/>
<column name="notes" sqlType="TEXT" precision="2000000000" scale="10" nullable="true" jdbcType="12"/>
<primary-key columns="id"/>
</table>
<table name="RIGS_profile" schema="" catalog="" type="TABLE">
<column name="id" sqlType="INTEGER" precision="2000000000" scale="10" nullable="false" jdbcType="4"/>
<column name="password" sqlType="VARCHAR(128)" precision="2000000000" scale="10" nullable="false" jdbcType="12"/>
<column name="last_login" sqlType="DATETIME" precision="2000000000" scale="10" nullable="false" jdbcType="12"/>
<column name="is_superuser" sqlType="BOOL" precision="2000000000" scale="10" nullable="false" jdbcType="4"/>
<column name="username" sqlType="VARCHAR(30)" precision="2000000000" scale="10" nullable="false" jdbcType="12"/>
<column name="first_name" sqlType="VARCHAR(30)" precision="2000000000" scale="10" nullable="false" jdbcType="12"/>
<column name="last_name" sqlType="VARCHAR(30)" precision="2000000000" scale="10" nullable="false" jdbcType="12"/>
<column name="email" sqlType="VARCHAR(75)" precision="2000000000" scale="10" nullable="false" jdbcType="12"/>
<column name="is_staff" sqlType="BOOL" precision="2000000000" scale="10" nullable="false" jdbcType="4"/>
<column name="is_active" sqlType="BOOL" precision="2000000000" scale="10" nullable="false" jdbcType="4"/>
<column name="date_joined" sqlType="DATETIME" precision="2000000000" scale="10" nullable="false" jdbcType="12"/>
<column name="initials" sqlType="VARCHAR(5)" precision="2000000000" scale="10" nullable="false" jdbcType="12"/>
<column name="phone" sqlType="VARCHAR(13)" precision="2000000000" scale="10" nullable="true" jdbcType="12"/>
<primary-key columns="id"/>
<exported-key name="#FAKE_RIGS_profile_groups_2" table="RIGS_profile_groups" schema="" catalog="" columns="profile_id"/>
<exported-key name="#FAKE_RIGS_profile_user_permissions_2" table="RIGS_profile_user_permissions" schema="" catalog="" columns="profile_id"/>
<exported-key name="#FAKE_django_admin_log_1" table="django_admin_log" schema="" catalog="" columns="user_id"/>
<exported-key name="#FAKE_reversion_revision_1" table="reversion_revision" schema="" catalog="" columns="user_id"/>
</table>
<table name="RIGS_profile_groups" schema="" catalog="" type="TABLE">
<column name="id" sqlType="INTEGER" precision="2000000000" scale="10" nullable="false" jdbcType="4"/>
<column name="profile_id" sqlType="INTEGER" precision="2000000000" scale="10" nullable="false" jdbcType="4"/>
<column name="group_id" sqlType="INTEGER" precision="2000000000" scale="10" nullable="false" jdbcType="4"/>
<primary-key columns="id"/>
<foreign-key name="#FAKE_RIGS_profile_groups_1" columns="group_id" ref-table="auth_group" ref-schema="" ref-catalog="" ref-columns="id" update-rule="3" delete-rule="3" deferrability="1"/>
<foreign-key name="#FAKE_RIGS_profile_groups_2" columns="profile_id" ref-table="RIGS_profile" ref-schema="" ref-catalog="" ref-columns="id" update-rule="3" delete-rule="3" deferrability="1"/>
<index name="RIGS_profile_groups_0e939a4f" unique="true" columns="group_id"/>
<index name="RIGS_profile_groups_83a0eb3f" unique="true" columns="profile_id"/>
</table>
<table name="RIGS_profile_user_permissions" schema="" catalog="" type="TABLE">
<column name="id" sqlType="INTEGER" precision="2000000000" scale="10" nullable="false" jdbcType="4"/>
<column name="profile_id" sqlType="INTEGER" precision="2000000000" scale="10" nullable="false" jdbcType="4"/>
<column name="permission_id" sqlType="INTEGER" precision="2000000000" scale="10" nullable="false" jdbcType="4"/>
<primary-key columns="id"/>
<foreign-key name="#FAKE_RIGS_profile_user_permissions_1" columns="permission_id" ref-table="auth_permission" ref-schema="" ref-catalog="" ref-columns="id" update-rule="3" delete-rule="3" deferrability="1"/>
<foreign-key name="#FAKE_RIGS_profile_user_permissions_2" columns="profile_id" ref-table="RIGS_profile" ref-schema="" ref-catalog="" ref-columns="id" update-rule="3" delete-rule="3" deferrability="1"/>
<index name="RIGS_profile_user_permissions_8373b171" unique="true" columns="permission_id"/>
<index name="RIGS_profile_user_permissions_83a0eb3f" unique="true" columns="profile_id"/>
</table>
<table name="auth_group" schema="" catalog="" type="TABLE">
<column name="id" sqlType="INTEGER" precision="2000000000" scale="10" nullable="false" jdbcType="4"/>
<column name="name" sqlType="VARCHAR(80)" precision="2000000000" scale="10" nullable="false" jdbcType="12"/>
<primary-key columns="id"/>
<exported-key name="#FAKE_RIGS_profile_groups_1" table="RIGS_profile_groups" schema="" catalog="" columns="group_id"/>
<exported-key name="#FAKE_auth_group_permissions_2" table="auth_group_permissions" schema="" catalog="" columns="group_id"/>
</table>
<table name="auth_group_permissions" schema="" catalog="" type="TABLE">
<column name="id" sqlType="INTEGER" precision="2000000000" scale="10" nullable="false" jdbcType="4"/>
<column name="group_id" sqlType="INTEGER" precision="2000000000" scale="10" nullable="false" jdbcType="4"/>
<column name="permission_id" sqlType="INTEGER" precision="2000000000" scale="10" nullable="false" jdbcType="4"/>
<primary-key columns="id"/>
<foreign-key name="#FAKE_auth_group_permissions_1" columns="permission_id" ref-table="auth_permission" ref-schema="" ref-catalog="" ref-columns="id" update-rule="3" delete-rule="3" deferrability="1"/>
<foreign-key name="#FAKE_auth_group_permissions_2" columns="group_id" ref-table="auth_group" ref-schema="" ref-catalog="" ref-columns="id" update-rule="3" delete-rule="3" deferrability="1"/>
<index name="auth_group_permissions_8373b171" unique="true" columns="permission_id"/>
<index name="auth_group_permissions_0e939a4f" unique="true" columns="group_id"/>
</table>
<table name="auth_permission" schema="" catalog="" type="TABLE">
<column name="id" sqlType="INTEGER" precision="2000000000" scale="10" nullable="false" jdbcType="4"/>
<column name="name" sqlType="VARCHAR(50)" precision="2000000000" scale="10" nullable="false" jdbcType="12"/>
<column name="content_type_id" sqlType="INTEGER" precision="2000000000" scale="10" nullable="false" jdbcType="4"/>
<column name="codename" sqlType="VARCHAR(100)" precision="2000000000" scale="10" nullable="false" jdbcType="12"/>
<primary-key columns="id"/>
<foreign-key name="#FAKE_auth_permission_1" columns="content_type_id" ref-table="django_content_type" ref-schema="" ref-catalog="" ref-columns="id" update-rule="3" delete-rule="3" deferrability="1"/>
<exported-key name="#FAKE_RIGS_profile_user_permissions_1" table="RIGS_profile_user_permissions" schema="" catalog="" columns="permission_id"/>
<exported-key name="#FAKE_auth_group_permissions_1" table="auth_group_permissions" schema="" catalog="" columns="permission_id"/>
<index name="auth_permission_417f1b1c" unique="true" columns="content_type_id"/>
</table>
<table name="django_admin_log" schema="" catalog="" type="TABLE">
<column name="id" sqlType="INTEGER" precision="2000000000" scale="10" nullable="false" jdbcType="4"/>
<column name="action_time" sqlType="DATETIME" precision="2000000000" scale="10" nullable="false" jdbcType="12"/>
<column name="object_id" sqlType="TEXT" precision="2000000000" scale="10" nullable="true" jdbcType="12"/>
<column name="object_repr" sqlType="VARCHAR(200)" precision="2000000000" scale="10" nullable="false" jdbcType="12"/>
<column name="action_flag" sqlType="SMALLINT UNSIGNED" precision="2000000000" scale="10" nullable="false" jdbcType="4"/>
<column name="change_message" sqlType="TEXT" precision="2000000000" scale="10" nullable="false" jdbcType="12"/>
<column name="content_type_id" sqlType="INTEGER" precision="2000000000" scale="10" nullable="true" jdbcType="4"/>
<column name="user_id" sqlType="INTEGER" precision="2000000000" scale="10" nullable="false" jdbcType="4"/>
<primary-key columns="id"/>
<foreign-key name="#FAKE_django_admin_log_1" columns="user_id" ref-table="RIGS_profile" ref-schema="" ref-catalog="" ref-columns="id" update-rule="3" delete-rule="3" deferrability="1"/>
<foreign-key name="#FAKE_django_admin_log_2" columns="content_type_id" ref-table="django_content_type" ref-schema="" ref-catalog="" ref-columns="id" update-rule="3" delete-rule="3" deferrability="1"/>
<index name="django_admin_log_e8701ad4" unique="true" columns="user_id"/>
<index name="django_admin_log_417f1b1c" unique="true" columns="content_type_id"/>
</table>
<table name="django_content_type" schema="" catalog="" type="TABLE">
<column name="id" sqlType="INTEGER" precision="2000000000" scale="10" nullable="false" jdbcType="4"/>
<column name="name" sqlType="VARCHAR(100)" precision="2000000000" scale="10" nullable="false" jdbcType="12"/>
<column name="app_label" sqlType="VARCHAR(100)" precision="2000000000" scale="10" nullable="false" jdbcType="12"/>
<column name="model" sqlType="VARCHAR(100)" precision="2000000000" scale="10" nullable="false" jdbcType="12"/>
<primary-key columns="id"/>
<exported-key name="#FAKE_auth_permission_1" table="auth_permission" schema="" catalog="" columns="content_type_id"/>
<exported-key name="#FAKE_django_admin_log_2" table="django_admin_log" schema="" catalog="" columns="content_type_id"/>
<exported-key name="#FAKE_reversion_version_2" table="reversion_version" schema="" catalog="" columns="content_type_id"/>
</table>
<table name="django_migrations" schema="" catalog="" type="TABLE">
<column name="id" sqlType="INTEGER" precision="2000000000" scale="10" nullable="false" jdbcType="4"/>
<column name="app" sqlType="VARCHAR(255)" precision="2000000000" scale="10" nullable="false" jdbcType="12"/>
<column name="name" sqlType="VARCHAR(255)" precision="2000000000" scale="10" nullable="false" jdbcType="12"/>
<column name="applied" sqlType="DATETIME" precision="2000000000" scale="10" nullable="false" jdbcType="12"/>
<primary-key columns="id"/>
</table>
<table name="django_session" schema="" catalog="" type="TABLE">
<column name="session_key" sqlType="VARCHAR(40)" precision="2000000000" scale="10" nullable="false" jdbcType="12"/>
<column name="session_data" sqlType="TEXT" precision="2000000000" scale="10" nullable="false" jdbcType="12"/>
<column name="expire_date" sqlType="DATETIME" precision="2000000000" scale="10" nullable="false" jdbcType="12"/>
<primary-key columns="session_key"/>
<index name="django_session_de54fa62" unique="true" columns="expire_date"/>
</table>
<table name="registration_registrationprofile" schema="" catalog="" type="TABLE">
<column name="id" sqlType="INTEGER" precision="2000000000" scale="10" nullable="false" jdbcType="4"/>
<column name="user_id" sqlType="INTEGER" precision="2000000000" scale="10" nullable="false" jdbcType="4"/>
<column name="activation_key" sqlType="VARCHAR(40)" precision="2000000000" scale="10" nullable="false" jdbcType="12"/>
<primary-key columns="id"/>
</table>
<table name="reversion_revision" schema="" catalog="" type="TABLE">
<column name="id" sqlType="INTEGER" precision="2000000000" scale="10" nullable="false" jdbcType="4"/>
<column name="manager_slug" sqlType="VARCHAR(200)" precision="2000000000" scale="10" nullable="false" jdbcType="12"/>
<column name="date_created" sqlType="DATETIME" precision="2000000000" scale="10" nullable="false" jdbcType="12"/>
<column name="comment" sqlType="TEXT" precision="2000000000" scale="10" nullable="false" jdbcType="12"/>
<column name="user_id" sqlType="INTEGER" precision="2000000000" scale="10" nullable="true" jdbcType="4"/>
<primary-key columns="id"/>
<foreign-key name="#FAKE_reversion_revision_1" columns="user_id" ref-table="RIGS_profile" ref-schema="" ref-catalog="" ref-columns="id" update-rule="3" delete-rule="3" deferrability="1"/>
<exported-key name="#FAKE_reversion_version_1" table="reversion_version" schema="" catalog="" columns="revision_id"/>
<index name="reversion_revision_e8701ad4" unique="true" columns="user_id"/>
<index name="reversion_revision_c69e55a4" unique="true" columns="date_created"/>
<index name="reversion_revision_b16b0f06" unique="true" columns="manager_slug"/>
</table>
<table name="reversion_version" schema="" catalog="" type="TABLE">
<column name="id" sqlType="INTEGER" precision="2000000000" scale="10" nullable="false" jdbcType="4"/>
<column name="object_id" sqlType="TEXT" precision="2000000000" scale="10" nullable="false" jdbcType="12"/>
<column name="object_id_int" sqlType="INTEGER" precision="2000000000" scale="10" nullable="true" jdbcType="4"/>
<column name="format" sqlType="VARCHAR(255)" precision="2000000000" scale="10" nullable="false" jdbcType="12"/>
<column name="serialized_data" sqlType="TEXT" precision="2000000000" scale="10" nullable="false" jdbcType="12"/>
<column name="object_repr" sqlType="TEXT" precision="2000000000" scale="10" nullable="false" jdbcType="12"/>
<column name="content_type_id" sqlType="INTEGER" precision="2000000000" scale="10" nullable="false" jdbcType="4"/>
<column name="revision_id" sqlType="INTEGER" precision="2000000000" scale="10" nullable="false" jdbcType="4"/>
<primary-key columns="id"/>
<foreign-key name="#FAKE_reversion_version_1" columns="revision_id" ref-table="reversion_revision" ref-schema="" ref-catalog="" ref-columns="id" update-rule="3" delete-rule="3" deferrability="1"/>
<foreign-key name="#FAKE_reversion_version_2" columns="content_type_id" ref-table="django_content_type" ref-schema="" ref-catalog="" ref-columns="id" update-rule="3" delete-rule="3" deferrability="1"/>
<index name="reversion_version_5de09a8d" unique="true" columns="revision_id"/>
<index name="reversion_version_417f1b1c" unique="true" columns="content_type_id"/>
<index name="reversion_version_0c9ba3a3" unique="true" columns="object_id_int"/>
</table>
<table name="sqlite_sequence" schema="" catalog="" type="TABLE">
<column name="name" sqlType="" precision="2000000000" scale="10" nullable="true" jdbcType="12"/>
<column name="seq" sqlType="" precision="2000000000" scale="10" nullable="true" jdbcType="12"/>
</table>
</data-source>
</component>

3
.idea/dataSources.xml generated
View File

@@ -1,10 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="DataSourceManagerImpl" format="xml" hash="3382254696">
<component name="DataSourceManagerImpl" format="xml" hash="3840546221">
<data-source source="LOCAL" name="Django default" uuid="09730cb6-cd27-4034-9959-d242e7905a51">
<driver-ref>sqlite.xerial</driver-ref>
<jdbc-driver>org.sqlite.JDBC</jdbc-driver>
<jdbc-url>jdbc:sqlite:D:\Users\Ghost\PycharmProjects\pyrigs\db.sqlite3</jdbc-url>
<table-pattern>.*</table-pattern>
<libraries />
</data-source>
</component>

View File

@@ -62,11 +62,22 @@ WSGI_APPLICATION = 'PyRIGS.wsgi.application'
# Database
# https://docs.djangoproject.com/en/1.7/ref/settings/#databases
try:
import pymysql
pymysql.install_as_MySQLdb()
except ImportError:
pass
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
},
'legacy': {
'ENGINE': 'django.db.backends.mysql',
'HOST': 'alfie.codedinternet.com',
'NAME': 'tec_rigs',
'USER': 'tec_rigs',
'PASSWORD': 'xMNb(b+Giu]&',
}
}

View File

@@ -1,13 +1,20 @@
{% extends request.is_ajax|yesno:"base_ajax.html,base.html" %}
{% load widget_tweaks %}
{% load paginator from filters %}
{% block title %}People list{% endblock %}
{% block content %}
<div class="col-sm-10 col-sm-offset-1">
<h3>People</h3>
<a href="{% url 'person_add' %}" class="btn btn-default pull-right">New <span class="glyphicon glyphicon-plus"></span></a>
<div class="align-right">{% include 'pagination.html' %}</div>
<div class="row">
<div class="col-sm-10">
<h3>People</h3>
</div>
<div class="col-sm-2">
<a href="{% url 'person_add' %}" class="btn btn-default pull-right">New <span class="glyphicon glyphicon-plus"></span></a>
</div>
</div>
<div class="pull-right">{% paginator %}</div>
<div>
<table class="table table-striped">
<thead>
@@ -29,7 +36,7 @@
<td>{{ person.phone }}</td>
<td>{{ person.notes|yesno|capfirst }}</td>
<td>
<a href="{% url 'person_detail' person.pk %}" class="btn btn-default" data-toggle="modal" data-target="#modal">
<a href="{% url 'person_detail' person.pk %}" class="btn btn-default modal-href">
<span class="glyphicon glyphicon-eye-open"></span>
</a>
<a href="{% url 'person_update' person.pk %}" class="btn btn-default"><span class="glyphicon glyphicon-pencil"></span></a>
@@ -44,6 +51,6 @@
</tbody>
</table>
</div>
<div class="align-right">{% include 'pagination.html' %}</div>
<div class="align-right">{% paginator %}</div>
</div>
{% endblock %}

View File

@@ -19,4 +19,45 @@ def nice_errors(form, non_field_msg='General form errors'):
else:
key = form.fields[field].label
nice_errors[key] = errors
return nice_errors
return nice_errors
def paginator(context, adjacent_pages=3):
"""
To be used in conjunction with the object_list generic view.
Adds pagination context variables for use in displaying first, adjacent and
last page links in addition to those created by the object_list generic
view.
"""
page = context['page_obj']
paginator = context['paginator']
startPage = max(page.number - adjacent_pages, 1)
if startPage <= 3: startPage = 1
endPage = page.number + adjacent_pages + 1
if endPage >= paginator.num_pages - 1: endPage = paginator.num_pages + 1
page_numbers = [n for n in range(startPage, endPage) \
if n > 0 and n <= paginator.num_pages]
dict = {
'is_paginated': paginator.num_pages > 0,
'page_obj': page,
'paginator': paginator,
'results': paginator.per_page,
'page_numbers': page_numbers,
'show_first': 1 not in page_numbers,
'show_last': paginator.num_pages not in page_numbers,
'first': 1,
'last': paginator.num_pages,
'has_next': page.has_next(),
'has_previous': page.has_previous(),
}
if page.has_next():
dict['next'] = page.next_page_number()
if page.has_previous():
dict['previous'] = page.previous_page_number()
return dict
register.inclusion_tag('pagination.html', takes_context=True)(paginator)

View File

@@ -1,7 +1,7 @@
from django.http.response import HttpResponseRedirect
from django.core.urlresolvers import reverse_lazy
from django.views import generic
import models
from RIGS import models
# Create your views here.
def login(request, **kwargs):
@@ -26,6 +26,7 @@ class CloseModal(generic.TemplateView):
class PersonIndex(generic.ListView):
model = models.Person
paginate_by = 20
class PersonDetail(generic.DetailView):
model = models.Person

View File

@@ -1,7 +1,6 @@
Django==1.7.1
PyMySQL==0.6.2
django-debug-toolbar==1.2.2
django-mysql-pymysql==0.1
django-registration-redux==1.1
django-reversion==1.8.5
sqlparse==0.1.13

View File

@@ -126,7 +126,6 @@
var dd = this.getDate().toString();
return yyyy + '-' + (mm[1]?mm:"0"+mm[0]) + '-' + (dd[1]?dd:"0"+dd[0]); // padding
};
</script>
<script src="{% static "js/jquery.cookie.js" %}"></script>
<script src="{% static "js/alert.js" %}"></script>
@@ -136,6 +135,16 @@
</script>
<script src="{% static "js/dropdown.js" %}"></script>
<script src="{% static "js/modal.js" %}"></script>
<script>
jQuery(document).ready(function() {
jQuery(document).on('click', '.modal-href', function(e) {
e.preventDefault()
jQuery('#modal').load(jQuery(this).attr('href'), function(e) {
jQuery('#modal').modal();
});
});
});
</script>
{% block js %}
{% endblock %}
</body>

View File

@@ -1,27 +1,35 @@
{% if request.is_paginated %}
{% if is_paginated %}
<div>
<ul class="pagination">
{% if page_obj.has_previous %}
<li><a href="?page{{ page_obj.previous_page_number }}{{ getvars }}{{ hashtag }}" class="prev">&lsaquo;&lsaquo;</a></li>
{% if has_previous %}
<li><a href="?page={{ previous }}{{ getvars }}{{ hashtag }}" class="prev">&lsaquo;&lsaquo;</a></li>
{% else %}
<li class="disabled prev"><a href="#">&lsaquo;&lsaquo;</a></li>
{% endif %}
{% for page in pages %}
{% if page %}
{% ifequal page page_obj.number %}
<li class="current page active"><a href="#">{{ page }}</a></li>
{% else %}
<li><a href="?page={{ page }}{{ getvars }}{{ hashtag }}" class="page">{{ page }}</a></li>
{% endifequal %}
{% else %}
...
{% endif %}
{% endfor %}
{% if page_obj.has_next %}
<li><a href="?page={{ page_obj.next_page_number }}{{ getvars }}{{ hashtag }}" class="next">&rsaquo;&rsaquo;</a></li>
{% else %}
<li class="disabled next"><a href="#">&rsaquo;&rsaquo;</a></li>
{% endif %}
</ul>
{% if show_first %}
<li><a href="?page={{ first }}{{ getvars }}{{ hashtag }}" class="prev">{{ first }}</a></li>
<li><span>&hellip;</span></li>
{% endif %}
{% for page in page_numbers %}
{% ifequal page page_obj.number %}
<li class="current page active"><a href="#">{{ page }}</a></li>
{% else %}
<li><a href="?page={{ page }}{{ getvars }}{{ hashtag }}" class="page">{{ page }}</a></li>
{% endifequal %}
{% endfor %}
{% if show_last %}
<li><span>&hellip;</span></li>
<li><a href="?page={{ last }}{{ getvars }}{{ hashtag }}" class="prev">{{ last }}</a></li>
{% endif %}
{% if has_next %}
<li><a href="?page={{ next}}{{ getvars }}{{ hashtag }}" class="next">&rsaquo;&rsaquo;</a></li>
{% else %}
<li class="disabled next"><a href="#">&rsaquo;&rsaquo;</a></li>
{% endif %}
</ul>
</div>
{% endif %}