summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--pgweb/core/views.py4
-rw-r--r--pgweb/docs/views.py3
-rw-r--r--pgweb/search/views.py17
-rw-r--r--pgweb/settings.py2
-rw-r--r--pgweb/util/contexts.py21
-rw-r--r--templates/base/base.html6
-rw-r--r--templates/docs/docspage.html6
7 files changed, 37 insertions, 22 deletions
diff --git a/pgweb/core/views.py b/pgweb/core/views.py
index 05693326..cdfa7ac9 100644
--- a/pgweb/core/views.py
+++ b/pgweb/core/views.py
@@ -63,7 +63,7 @@ def home(request):
'quote': quote,
'versions': versions,
'planet': planet,
- })
+ }, RequestContext(request))
# Community main page (contains surveys and potentially more)
def community(request):
@@ -244,7 +244,7 @@ def sync_timestamp(request):
def admin_pending(request):
return render_to_response('core/admin_pending.html', {
'app_list': get_all_pending_moderations(),
- })
+ }, RequestContext(request))
# Purge objects from varnish, for the admin pages
@login_required
diff --git a/pgweb/docs/views.py b/pgweb/docs/views.py
index 76795863..647b54f7 100644
--- a/pgweb/docs/views.py
+++ b/pgweb/docs/views.py
@@ -1,6 +1,7 @@
from django.shortcuts import render_to_response, get_object_or_404
from django.http import HttpResponse, Http404, HttpResponseRedirect
from django.template import TemplateDoesNotExist, loader, Context
+from django.template.context import RequestContext
from django.contrib.auth.decorators import login_required
from django.db.models import Q
from django.conf import settings
@@ -67,7 +68,7 @@ def docpage(request, version, typ, filename):
'can_comment': (typ=="interactive" and ver==currver),
'doc_index_filename': indexname,
'loaddate': loaddate,
- })
+ }, RequestContext(request))
def docsrootpage(request, version, typ):
return docpage(request, version, typ, 'index')
diff --git a/pgweb/search/views.py b/pgweb/search/views.py
index 94df6321..1b282893 100644
--- a/pgweb/search/views.py
+++ b/pgweb/search/views.py
@@ -1,4 +1,5 @@
from django.shortcuts import render_to_response, get_object_or_404
+from django.template.context import RequestContext
from django.http import HttpResponse, Http404, HttpResponseRedirect
from django.views.decorators.csrf import csrf_exempt
from django.conf import settings
@@ -125,18 +126,18 @@ def search(request):
'listid': listid,
'dates': dateoptions,
'dateval': dateval,
- })
+ }, RequestContext(request))
else:
return render_to_response('search/sitesearch.html', {
'search_error': "No search term specified.",
- })
+ }, RequestContext(request))
query = request.REQUEST['q']
# Anti-stefan prevention
if len(query) > 1000:
return render_to_response('search/sitesearch.html', {
'search_error': "Search term too long.",
- })
+ }, RequestContext(request))
# Is the request being paged?
if request.REQUEST.has_key('p'):
@@ -186,12 +187,12 @@ def search(request):
except socket.timeout:
return render_to_response('search/listsearch.html', {
'search_error': 'Timeout when talking to search server. Please try your search again later, or with a more restrictive search terms.',
- })
+ }, RequestContext(request))
if r.status != 200:
memc = None
return render_to_response('search/listsearch.html', {
'search_error': 'Error talking to search server: %s' % r.reason,
- })
+ }, RequestContext(request))
hits = json.loads(r.read())
if has_memcached and memc:
# Store them in memcached too! But only for 10 minutes...
@@ -236,7 +237,7 @@ def search(request):
'listid': listid,
'dates': dateoptions,
'dateval': dateval,
- })
+ }, RequestContext(request))
else:
# Website search is still done by making a regular pgsql connection
@@ -247,7 +248,7 @@ def search(request):
except:
return render_to_response('search/sitesearch.html', {
'search_error': 'Could not connect to search database.'
- })
+ }, RequestContext(request))
# perform the query for general web search
curs.execute("SELECT * FROM site_search(%(query)s, %(firsthit)s, %(hitsperpage)s, %(allsites)s, %(suburl)s)", {
@@ -283,4 +284,4 @@ def search(request):
'url': "%s%s" % (h[1], h[2]),
'abstract': h[4].replace("[[[[[[", "<b>").replace("]]]]]]","</b>"),
'rank': h[5]} for h in hits[:-1]],
- })
+ }, RequestContext(request))
diff --git a/pgweb/settings.py b/pgweb/settings.py
index 8930dba6..c7402fa7 100644
--- a/pgweb/settings.py
+++ b/pgweb/settings.py
@@ -79,7 +79,7 @@ TEMPLATE_CONTEXT_PROCESSORS = (
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
'django.core.context_processors.media',
- 'util.contexts.RootLinkContextProcessor',
+ 'util.contexts.PGWebContextProcessor',
)
LOGIN_URL='/account/login/'
diff --git a/pgweb/util/contexts.py b/pgweb/util/contexts.py
index e7dbdd48..18a1c780 100644
--- a/pgweb/util/contexts.py
+++ b/pgweb/util/contexts.py
@@ -1,4 +1,5 @@
from django.template import RequestContext
+from django.utils.functional import SimpleLazyObject
from django.conf import settings
# This is the whole site navigation structure. Stick in a smarter file?
@@ -100,12 +101,24 @@ class NavContext(RequestContext):
self.update({'navmenu': navsection})
-# Template context processor to add information about the root link
-def RootLinkContextProcessor(request):
+def _get_gitrev():
+ # Return the current git revision, that is used for
+ # cache-busting URLs.
+ with open('../.git/refs/heads/master') as f:
+ return f.readline()[:8]
+
+# Template context processor to add information about the root link and
+# the current git revision. git revision is returned as a lazy object so
+# we don't spend effort trying to load it if we don't need it (though
+# all general pages will need it since it's used to render the css urls)
+def PGWebContextProcessor(request):
+ gitrev = SimpleLazyObject(_get_gitrev)
if request.is_secure():
return {
'link_root': settings.SITE_ROOT,
+ 'gitrev': gitrev,
}
else:
- return {}
-
+ return {
+ 'gitrev': gitrev,
+ }
diff --git a/templates/base/base.html b/templates/base/base.html
index feadc57c..251caab1 100644
--- a/templates/base/base.html
+++ b/templates/base/base.html
@@ -6,12 +6,12 @@
<meta http-equiv="Content-Type" content="text/xhtml; charset=utf-8" />
{%block meta%}{%endblock%} {# used for custom meta tags such as description which we don't want for every page #}
<meta name="copyright" content="The PostgreSQL Global Development Group" />
- <style type="text/css" media="screen" title="Normal Text">@import url("/dyncss/base.css");</style>
+ <style type="text/css" media="screen" title="Normal Text">@import url("/dyncss/base.css?{{gitrev}}");</style>
<link rel="shortcut icon" href="/favicon.ico" />
- <link rel="alternate stylesheet" type="text/css" media="screen" title="Large Text" href="/media/css/docs_large.css" />
+ <link rel="alternate stylesheet" type="text/css" media="screen" title="Large Text" href="/media/css/docs_large.css?{{gitrev}}" />
<link rel="alternate" type="application/rss+xml" title="PostgreSQL News" href="{{link_root}}/news.rss" />
<link rel="alternate" type="application/rss+xml" title="PostgreSQL Events" href="{{link_root}}/events.rss" />
- <script async type="text/javascript" src="/media/js/styleswitcher.js"></script>
+ <script async type="text/javascript" src="/media/js/styleswitcher.js?{{gitrev}}"></script>
<script type="text/javascript">
var _gaq = _gaq || [];
_gaq.push(['_setAccount', 'UA-1345454-1']);
diff --git a/templates/docs/docspage.html b/templates/docs/docspage.html
index 1c3d0818..64378905 100644
--- a/templates/docs/docspage.html
+++ b/templates/docs/docspage.html
@@ -2,10 +2,10 @@
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en" dir="ltr">
<head>
<title>PostgreSQL: Documentation: {{page.display_version}}: {{page.title}}</title>
- <style type="text/css" media="screen" title="Normal Text">@import url("/dyncss/docs.css");</style>
+ <style type="text/css" media="screen" title="Normal Text">@import url("/dyncss/docs.css?{{gitrev}}");</style>
<link rel="alternate stylesheet" media="screen" href="/media/css/docs_large.css" type="text/css" title="Large Text" />
- <script async type="text/javascript" src="/media/js/styleswitcher.js"></script>
- <script type="text/javascript" src="/media/js/monospacefix.js"></script>
+ <script async type="text/javascript" src="/media/js/styleswitcher.js?{{gitrev}}"></script>
+ <script type="text/javascript" src="/media/js/monospacefix.js?{{gitrev}}"></script>
<script type="text/javascript">
var _gaq = _gaq || [];
_gaq.push(['_setAccount', 'UA-1345454-1']);