summaryrefslogtreecommitdiff
path: root/templates
diff options
context:
space:
mode:
authorLuke Shumaker <lukeshu@sbcglobal.net>2015-04-16 01:16:52 -0400
committerLuke Shumaker <lukeshu@sbcglobal.net>2015-04-16 01:16:52 -0400
commit7aabbe788bb4e26ee9c7cfc0e18692b487e11099 (patch)
treee1032beb86e35caafb164e694d2aa7e2e9664de2 /templates
parent046e6c8b6152a8142ed838e5c406cc04c18f2533 (diff)
parent155bf43a28e404f327a7bcff214c22e212627673 (diff)
Merge branch 'archweb-generic'
Diffstat (limited to 'templates')
-rw-r--r--templates/devel/index.html15
-rw-r--r--templates/mirrors/error_table.html.jinja (renamed from templates/mirrors/error_table.html)8
-rw-r--r--templates/mirrors/mirror_details.html40
-rw-r--r--templates/mirrors/mirror_details_urls.html.jinja36
-rw-r--r--templates/mirrors/status.html6
-rw-r--r--templates/mirrors/status_table.html30
-rw-r--r--templates/mirrors/status_table.html.jinja28
-rw-r--r--templates/mirrors/url_details.html29
-rw-r--r--templates/mirrors/url_details_logs.html.jinja26
-rw-r--r--templates/news/list.html3
-rw-r--r--templates/public/keys.html4
-rw-r--r--templates/releng/release_detail.html15
-rw-r--r--templates/releng/release_list.html25
-rw-r--r--templates/sitemaps/news_sitemap.xml.jinja14
-rw-r--r--templates/sitemaps/sitemap.xml.jinja9
-rw-r--r--templates/todolists/list.html7
-rw-r--r--templates/todolists/paginator.html22
17 files changed, 193 insertions, 124 deletions
diff --git a/templates/devel/index.html b/templates/devel/index.html
index 72f149a3..3a0fb9a9 100644
--- a/templates/devel/index.html
+++ b/templates/devel/index.html
@@ -157,8 +157,11 @@
</ul>
</div>{# #dev-dashboard #}
-<div id='stats-area'>
- <p>Enable Javascript to get more useful info here.</p>
+<div id="stats-area">
+ <div class="box">
+ <h2>Developer Stats</h2>
+ <p id="stats-message">Enable JavaScript to get more useful info here.</p>
+ </div>
</div>
{% endblock %}
@@ -167,8 +170,12 @@
<script type="text/javascript" src="{% static "archweb.js" %}"></script>
<script type="text/javascript">
$(document).ready(function() {
- $("#stats-area").html('<p>Loading stats…</p>');
- $("#stats-area").load('stats/', function() {
+ $("#stats-message").html('Loading developer stats…');
+ $("#stats-area").load('stats/', function(response, status, xhr) {
+ if (status === 'error' || status === 'timeout') {
+ $("#stats-message").html('Developer stats loading encountered an error. Sorry.');
+ return;
+ }
var settings = {
widgets: ['zebra'],
sortList: [[0,0]],
diff --git a/templates/mirrors/error_table.html b/templates/mirrors/error_table.html.jinja
index cd7265af..52f68135 100644
--- a/templates/mirrors/error_table.html
+++ b/templates/mirrors/error_table.html.jinja
@@ -1,5 +1,3 @@
-{% load cycle from future %}
-{% load flags mirror_status %}
<table id="errorlog_mirrors" class="results">
<thead>
<tr>
@@ -12,12 +10,12 @@
</tr>
</thead>
<tbody>
- {% for log in error_logs %}<tr class="{% cycle 'odd' 'even' %}">
+ {% for log in error_logs %}<tr class="{{ loop.cycle('odd', 'even') }}">
<td>{{ log.url__url }}</td>
<td>{{ log.url__protocol__protocol }}</td>
- <td class="country">{% country_flag log.country %}{{ log.country.name }}</td>
+ <td class="country">{{ country_flag(log.country) }}{{ log.country.name }}</td>
<td class="wrap">{{ log.error|linebreaksbr }}</td>
- <td>{{ log.last_occurred|date:'Y-m-d H:i' }}</td>
+ <td>{{ log.last_occurred|date('Y-m-d H:i') }}</td>
<td>{{ log.error_count }}</td>
</tr>{% endfor %}
</tbody>
diff --git a/templates/mirrors/mirror_details.html b/templates/mirrors/mirror_details.html
index ffaacfe6..3220195d 100644
--- a/templates/mirrors/mirror_details.html
+++ b/templates/mirrors/mirror_details.html
@@ -90,46 +90,10 @@
</table>
<h3>Available URLs</h3>
-
- <table id="available_urls" class="results">
- <thead>
- <tr>
- <th>Mirror URL</th>
- <th>Protocol</th>
- <th>Country</th>
- <th>IPv4</th>
- <th>IPv6</th>
- <th>Last Sync</th>
- <th>Completion %</th>
- <th>μ Delay (hh:mm)</th>
- <th>μ Duration (s)</th>
- <th>σ Duration (s)</th>
- <th>Score</th>
- <th>Details</th>
- </tr>
- </thead>
- <tbody>
- {% for m_url in urls %}
- <tr class="{% cycle 'odd' 'even' %}">
- <td>{% if m_url.protocol.is_download %}<a href="{{ m_url.url }}">{{ m_url.url }}</a>{% else %}{{ m_url.url }}{% endif %}</td>
- <td>{{ m_url.protocol }}</td>
- <td class="country">{% country_flag m_url.country %}{{ m_url.country.name }}</td>
- <td>{{ m_url.has_ipv4|yesno|capfirst }}</td>
- <td>{{ m_url.has_ipv6|yesno|capfirst }}</td>
- <td>{{ m_url.last_sync|date:'Y-m-d H:i'|default:'unknown' }}</td>
- <td>{{ m_url.completion_pct|percentage:1 }}</td>
- <td>{{ m_url.delay|duration|default:'unknown' }}</td>
- <td>{{ m_url.duration_avg|floatvalue:2 }}</td>
- <td>{{ m_url.duration_stddev|floatvalue:2 }}</td>
- <td>{{ m_url.score|floatvalue:1|default:'∞' }}</td>
- <td><a href="{{ m_url.id }}/">Details</a></td>
- </tr>
- {% endfor %}
- </tbody>
- </table>
+ {% include "mirrors/mirror_details_urls.html.jinja" %}
<h3>Error Log</h3>
- {% include "mirrors/error_table.html" %}
+ {% include "mirrors/error_table.html.jinja" %}
</div>
<div class="box">
diff --git a/templates/mirrors/mirror_details_urls.html.jinja b/templates/mirrors/mirror_details_urls.html.jinja
new file mode 100644
index 00000000..7ab1548b
--- /dev/null
+++ b/templates/mirrors/mirror_details_urls.html.jinja
@@ -0,0 +1,36 @@
+<table id="available_urls" class="results">
+ <thead>
+ <tr>
+ <th>Mirror URL</th>
+ <th>Protocol</th>
+ <th>Country</th>
+ <th>IPv4</th>
+ <th>IPv6</th>
+ <th>Last Sync</th>
+ <th>Completion %</th>
+ <th>μ Delay (hh:mm)</th>
+ <th>μ Duration (s)</th>
+ <th>σ Duration (s)</th>
+ <th>Score</th>
+ <th>Details</th>
+ </tr>
+ </thead>
+ <tbody>
+ {% for m_url in urls %}
+ <tr class="{{ loop.cycle('odd', 'even') }}">
+ <td>{% if m_url.protocol.is_download %}<a href="{{ m_url.url }}">{{ m_url.url }}</a>{% else %}{{ m_url.url }}{% endif %}</td>
+ <td>{{ m_url.protocol }}</td>
+ <td class="country">{{ country_flag(m_url.country) }}{{ m_url.country.name }}</td>
+ <td>{{ m_url.has_ipv4|yesno|capfirst }}</td>
+ <td>{{ m_url.has_ipv6|yesno|capfirst }}</td>
+ <td>{{ m_url.last_sync|date('Y-m-d H:i')|default('unknown') }}</td>
+ <td>{{ m_url.completion_pct|percentage(1) }}</td>
+ <td>{{ m_url.delay|duration|default('unknown') }}</td>
+ <td>{{ m_url.duration_avg|floatvalue(2) }}</td>
+ <td>{{ m_url.duration_stddev|floatvalue(2) }}</td>
+ <td>{{ m_url.score|floatvalue(1)|default('∞') }}</td>
+ <td><a href="{{ m_url.id }}/">Details</a></td>
+ </tr>
+ {% endfor %}
+ </tbody>
+</table>
diff --git a/templates/mirrors/status.html b/templates/mirrors/status.html
index 250d9bad..f11d57ca 100644
--- a/templates/mirrors/status.html
+++ b/templates/mirrors/status.html
@@ -60,18 +60,18 @@
<a name="outofsync" id="outofsync"></a>
<h3>Out of Sync Mirrors</h3>
{% with urls=bad_urls table_id='outofsync_mirrors' %}
- {% include "mirrors/status_table.html" %}
+ {% include "mirrors/status_table.html.jinja" %}
{% endwith %}
<a name="successful" id="successful"></a>
<h3>Successfully Syncing Mirrors</h3>
{% with urls=good_urls table_id='successful_mirrors' %}
- {% include "mirrors/status_table.html" %}
+ {% include "mirrors/status_table.html.jinja" %}
{% endwith %}
<a name="errorlog" id="errorlog"></a>
<h3>Mirror Syncing Error Log</h3>
- {% include "mirrors/error_table.html" %}
+ {% include "mirrors/error_table.html.jinja" %}
</div>
{% endblock %}
diff --git a/templates/mirrors/status_table.html b/templates/mirrors/status_table.html
deleted file mode 100644
index 83538303..00000000
--- a/templates/mirrors/status_table.html
+++ /dev/null
@@ -1,30 +0,0 @@
-{% load cycle from future %}
-{% load flags mirror_status %}
-<table id="{{ table_id }}" class="results">
- <thead>
- <tr>
- <th>Mirror URL</th>
- <th>Protocol</th>
- <th>Country</th>
- <th>Completion %</th>
- <th>μ Delay (hh:mm)</th>
- <th>μ Duration (s)</th>
- <th>σ Duration (s)</th>
- <th>Mirror Score</th>
- <th></th>
- </tr>
- </thead>
- <tbody>
- {% for m_url in urls %}<tr class="{% cycle 'odd' 'even' %}">
- <td>{{ m_url.url }}</td>
- <td>{{ m_url.protocol }}</td>
- <td class="country">{% country_flag m_url.country %}{{ m_url.country.name }}</td>
- <td>{{ m_url.completion_pct|percentage:1 }}</td>
- <td>{{ m_url.delay|duration|default:'unknown' }}</td>
- <td>{{ m_url.duration_avg|floatvalue:2 }}</td>
- <td>{{ m_url.duration_stddev|floatvalue:2 }}</td>
- <td>{{ m_url.score|floatvalue:1|default:'∞' }}</td>
- <td><a href="{{ m_url.get_absolute_url }}">details</a></td>
- </tr>{% endfor %}
- </tbody>
-</table>
diff --git a/templates/mirrors/status_table.html.jinja b/templates/mirrors/status_table.html.jinja
new file mode 100644
index 00000000..598a1af0
--- /dev/null
+++ b/templates/mirrors/status_table.html.jinja
@@ -0,0 +1,28 @@
+<table id="{{ table_id }}" class="results">
+ <thead>
+ <tr>
+ <th>Mirror URL</th>
+ <th>Protocol</th>
+ <th>Country</th>
+ <th>Completion %</th>
+ <th>μ Delay (hh:mm)</th>
+ <th>μ Duration (s)</th>
+ <th>σ Duration (s)</th>
+ <th>Mirror Score</th>
+ <th></th>
+ </tr>
+ </thead>
+ <tbody>
+ {% for m_url in urls %}<tr class="{{ loop.cycle('odd', 'even') }}">
+ <td>{{ m_url.url }}</td>
+ <td>{{ m_url.protocol }}</td>
+ <td class="country">{{ country_flag(m_url.country) }}{{ m_url.country.name }}</td>
+ <td>{{ m_url.completion_pct|percentage(1) }}</td>
+ <td>{{ m_url.delay|duration|default('unknown') }}</td>
+ <td>{{ m_url.duration_avg|floatvalue(2) }}</td>
+ <td>{{ m_url.duration_stddev|floatvalue(2) }}</td>
+ <td>{{ m_url.score|floatvalue(1)|default('∞') }}</td>
+ <td><a href="{{ m_url.get_absolute_url() }}">details</a></td>
+ </tr>{% endfor %}
+ </tbody>
+</table>
diff --git a/templates/mirrors/url_details.html b/templates/mirrors/url_details.html
index c47e0508..96fcc49d 100644
--- a/templates/mirrors/url_details.html
+++ b/templates/mirrors/url_details.html
@@ -1,5 +1,4 @@
{% extends "base.html" %}
-{% load cycle from future %}
{% load static from staticfiles %}
{% load mirror_status %}
{% load flags %}
@@ -58,33 +57,7 @@
</table>
<h3>Check Logs</h3>
-
- <table id="check_logs" class="results">
- <thead>
- <tr>
- <th>Check Time</th>
- <th>Check Location</th>
- <th>Check IP</th>
- <th>Last Sync</th>
- <th>Delay (hh:mm)</th>
- <th>Duration (s)</th>
- <th>Success?</th>
- <th>Error Message</th>
- </tr>
- </thead>
- <tbody>
- {% for log in logs %}<tr class="{% cycle 'odd' 'even' %}">
- <td>{{ log.check_time|date:'Y-m-d H:i' }}</td>
- <td class="country">{% country_flag log.location.country %}{{ log.location.country.name }}</td>
- <td>{{ log.location.source_ip }}</td>
- <td>{{ log.last_sync|date:'Y-m-d H:i' }}</td>
- <td>{{ log.delay|duration }}</td>
- <td>{{ log.duration|floatvalue }}</td>
- <td>{{ log.is_success|yesno|capfirst }}</td>
- <td class="wrap">{{ log.error|linebreaksbr }}</td>
- </tr>{% endfor %}
- </tbody>
- </table>
+ {% include "mirrors/url_details_logs.html.jinja" %}
</div>
{% endblock %}
diff --git a/templates/mirrors/url_details_logs.html.jinja b/templates/mirrors/url_details_logs.html.jinja
new file mode 100644
index 00000000..58f179d8
--- /dev/null
+++ b/templates/mirrors/url_details_logs.html.jinja
@@ -0,0 +1,26 @@
+<table id="check_logs" class="results">
+ <thead>
+ <tr>
+ <th>Check Time</th>
+ <th>Check Location</th>
+ <th>Check IP</th>
+ <th>Last Sync</th>
+ <th>Delay (hh:mm)</th>
+ <th>Duration (s)</th>
+ <th>Success?</th>
+ <th>Error Message</th>
+ </tr>
+ </thead>
+ <tbody>
+ {% for log in logs %}<tr class="{{ loop.cycle('odd', 'even') }}">
+ <td>{{ log.check_time|date('Y-m-d H:i') }}</td>
+ <td class="country">{{ country_flag(log.location.country) }}{{ log.location.country.name }}</td>
+ <td>{{ log.location.source_ip }}</td>
+ <td>{{ log.last_sync|date('Y-m-d H:i') }}</td>
+ <td>{{ log.delay|duration }}</td>
+ <td>{{ log.duration|floatvalue }}</td>
+ <td>{{ log.is_success|yesno|capfirst }}</td>
+ <td class="wrap">{{ log.error|linebreaksbr }}</td>
+ </tr>{% endfor %}
+ </tbody>
+</table>
diff --git a/templates/news/list.html b/templates/news/list.html
index 3295e333..8662a91b 100644
--- a/templates/news/list.html
+++ b/templates/news/list.html
@@ -10,7 +10,7 @@
{% block content %}
<div id="news-article-list" class="box">
- <h2>News Archives</h2>
+ <h2>{{ BRANDING_DISTRONAME }} News Archives</h2>
{% if perms.news.add_news %}
<ul class="admin-actions">
@@ -54,6 +54,5 @@
</table>
{% include "news/paginator.html" %}
-
</div>
{% endblock %}
diff --git a/templates/public/keys.html b/templates/public/keys.html
index 0818719c..f15ec1a9 100644
--- a/templates/public/keys.html
+++ b/templates/public/keys.html
@@ -123,8 +123,8 @@
<tbody>
{% for sig in cross_signatures %}
<tr>
- <td>{% user_pgp_key_link sig.signer %}</td>
- <td>{% user_pgp_key_link sig.signee %}</td>
+ <td>{% user_pgp_key_link developer_keys sig.signer %}</td>
+ <td>{% user_pgp_key_link developer_keys sig.signee %}</td>
<td>{{ sig.created }}</td>
<td>{{ sig.expires|default:"" }}</td>
</tr>
diff --git a/templates/releng/release_detail.html b/templates/releng/release_detail.html
index d04533b9..97017600 100644
--- a/templates/releng/release_detail.html
+++ b/templates/releng/release_detail.html
@@ -1,4 +1,5 @@
{% extends "base.html" %}
+{% load static %}
{% block title %}{{ BRANDING_DISTRONAME }} - Release: {{ release.version }}{% endblock %}
@@ -9,11 +10,15 @@
<ul>
<li><strong>Release Date:</strong> {{ release.release_date|date }}</li>
{% if release.kernel_version %}<li><strong>Kernel Version:</strong> {{ release.kernel_version }}</li>{% endif %}
- <li><strong>Available:</strong> {{ release.available|yesno }}</li>
- {% if release.torrent_data %}<li><strong>Download:</strong> <a
- href="{% url 'releng-release-torrent' release.version %}"
- title="Download torrent for {{ release.version }}">Torrent</a>,
- <a href="{{ release.magnet_uri }}">Magnet</a></li>{% endif %}
+ <li><strong>Available:</strong> {{ release.available|yesno|capfirst }}</li>
+ {% if release.torrent_data %}
+ <li><a href="{% url 'releng-release-torrent' release.version %}"
+ title="Download torrent for {{ release.version }}">
+ Download via Torrent <img width="12" height="12" src="{% static "download.png" %}" alt=""/></a></li>
+ <li><a href="{{ release.magnet_uri }}"
+ title="Get magnet link for {{ release.version }}">
+ Download via Magnet URI <img width="12" height="12" src="{% static "magnet.png" %}" alt=""/></a></li>
+ {% endif %}
{% if release.md5_sum %}<li><strong>MD5:</strong> {{ release.md5_sum }}</li>{% endif %}
{% if release.sha1_sum %}<li><strong>SHA1:</strong> {{ release.sha1_sum }}</li>{% endif %}
</ul>
diff --git a/templates/releng/release_list.html b/templates/releng/release_list.html
index af8b8a61..3f442d07 100644
--- a/templates/releng/release_list.html
+++ b/templates/releng/release_list.html
@@ -12,28 +12,41 @@
<div id="release-list" class="box">
<h2>Releases</h2>
+ <p>This is a list of ISO releases made by the Arch Linux release
+ engineering team. These are typically done on a monthly cadence, containing
+ the latest kernel and base packages from the package repositories. Click
+ the version of each release to read any additional notes or details about
+ each release.</p>
+ <p>Torrents and magnet URIs are available to download the releases.
+ Releases listed as not available may still be seeded by peers, but are no
+ longer registered via the official Arch Linux torrent tracker. We always
+ recommend running the latest available release.</p>
+
<table id="release-table" class="results">
<thead>
<tr>
+ <th style="width: 30px;"></th>
<th>Release Date</th>
<th>Version</th>
<th>Kernel Version</th>
<th>Available?</th>
- <th>Torrent</th>
- <th>Magnet</th>
<th>Download Size</th>
</tr>
</thead>
<tbody>
{% for item in release_list %}
<tr class="{% cycle 'odd' 'even' %}">
+ <td>{% if item.torrent_data %}
+ <a href="{% url 'releng-release-torrent' item.version %}"
+ title="Download torrent for {{ item.version }}"><img width="12" height="12" src="{% static "download.png" %}" alt="Torrent"/></a>
+ &nbsp;
+ <a href="{{ item.magnet_uri }}"
+ title="Get magnet link for {{ item.version }}"><img width="12" height="12" src="{% static "magnet.png" %}" alt="Magnet"/></a>
+ {% endif %}</td>
<td>{{ item.release_date|date }}</td>
<td><a href="{{ item.get_absolute_url }}" title="Release details for {{ item.version }}">{{ item.version }}</a></td>
<td>{{ item.kernel_version|default:"" }}</td>
<td class="available-{{ item.available|yesno }}">{{ item.available|yesno|capfirst }}</td>
- <td>{% if item.available %}<a href="{% url 'releng-release-torrent' item.version %}"
- title="Download torrent for {{ item.version }}">Torrent</a>{% endif %}</td>
- <td>{% if item.available %}<a href="{{ item.magnet_uri }}">Magnet</a>{% endif %}</td>
<td>{% if item.torrent_data %}{{ item.torrent.file_length|filesizeformat }}{% endif %}</td>
</tr>
{% endfor %}
@@ -50,7 +63,7 @@ $(document).ready(function() {
$(".results").tablesorter({
widgets: ['zebra'],
sortList: [[0,1], [1,1]],
- headers: { 4: { sorter: false }, 5: { sorter: false } }
+ headers: { 0: { sorter: false } }
});
});
</script>
diff --git a/templates/sitemaps/news_sitemap.xml.jinja b/templates/sitemaps/news_sitemap.xml.jinja
new file mode 100644
index 00000000..97dd17b5
--- /dev/null
+++ b/templates/sitemaps/news_sitemap.xml.jinja
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:news="http://www.google.com/schemas/sitemap-news/0.9">
+{% for url in urlset %}<url>
+<loc>{{ url.location }}</loc>
+{% if url.lastmod %}<lastmod>{{ url.lastmod|date("Y-m-d") }}</lastmod>{% endif %}
+{% if url.changefreq %}<changefreq>{{ url.changefreq }}</changefreq>{% endif %}
+{% if url.priority %}<priority>{{ url.priority }}</priority>{% endif %}
+<news:news>
+ <news:publication><news:name>Arch Linux News</news:name><news:language>en</news:language></news:publication>
+ {% if url.item.postdate %}<news:publication_date>{{ url.item.postdate|date("c") }}</news:publication_date>{% endif %}
+ {% if url.item.title %}<news:title>{{ url.item.title }}</news:title>{% endif %}
+</news:news>
+</url>{% endfor %}
+</urlset>
diff --git a/templates/sitemaps/sitemap.xml.jinja b/templates/sitemaps/sitemap.xml.jinja
new file mode 100644
index 00000000..0808a7de
--- /dev/null
+++ b/templates/sitemaps/sitemap.xml.jinja
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
+{% for url in urlset %}<url>
+<loc>{{ url.location }}</loc>
+{% if url.lastmod %}<lastmod>{{ url.lastmod|date("Y-m-d") }}</lastmod>{% endif %}
+{% if url.changefreq %}<changefreq>{{ url.changefreq }}</changefreq>{% endif %}
+{% if url.priority %}<priority>{{ url.priority }}</priority>{% endif %}
+</url>{% endfor %}
+</urlset>
diff --git a/templates/todolists/list.html b/templates/todolists/list.html
index 0f1ccfd7..5cfd6a02 100644
--- a/templates/todolists/list.html
+++ b/templates/todolists/list.html
@@ -16,7 +16,10 @@
<p>Todo lists are used by the developers when a rebuild of a set of
packages is needed. This is common when a library has a version bump,
during a toolchain rebuild, or a general cleanup of packages in the
- repositories. The progress can be tracked here.</p>
+ repositories. The progress can be tracked here, and completed todo lists
+ can be browsed as well.</p>
+
+ {% include "todolists/paginator.html" %}
<table id="dev-todo-lists" class="results todo-table">
<thead>
@@ -46,6 +49,8 @@
{% endfor %}
</tbody>
</table>
+
+ {% include "todolists/paginator.html" %}
</div>
{% endblock %}
diff --git a/templates/todolists/paginator.html b/templates/todolists/paginator.html
new file mode 100644
index 00000000..3b077419
--- /dev/null
+++ b/templates/todolists/paginator.html
@@ -0,0 +1,22 @@
+{% if is_paginated %}
+<div class="pagination">
+ <p>{{ paginator.count }} todo lists, viewing page {{ page_obj.number }} of {{ paginator.num_pages }}.</p>
+ <p class="todolist-nav">
+ {% if page_obj.has_previous %}
+ <a class="prev" href="?page={{ page_obj.previous_page_number }}"
+ title="Go to previous page">&lt; Prev</a>
+ {% endif %}
+ {% for num in paginator.page_range %}
+ {% ifequal num page_obj.number %}
+ <span>{{ num }}</span>
+ {% else %}
+ <a href="?page={{ num }}" title="Go to page {{ num }}">{{ num }}</a>
+ {% endifequal %}
+ {% endfor %}
+ {% if page_obj.has_next %}
+ <a class="next" href="?page={{ page_obj.next_page_number }}"
+ title="Go to next page">Next &gt;</a>
+ {% endif %}
+ </p>
+</div>
+{% endif %}