diff options
-rw-r--r-- | pgweb/core/views.py | 4 | ||||
-rw-r--r-- | pgweb/docs/views.py | 3 | ||||
-rw-r--r-- | pgweb/search/views.py | 17 | ||||
-rw-r--r-- | pgweb/settings.py | 2 | ||||
-rw-r--r-- | pgweb/util/contexts.py | 21 | ||||
-rw-r--r-- | templates/base/base.html | 6 | ||||
-rw-r--r-- | templates/docs/docspage.html | 6 |
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']); |