Replace NavContext and render_to_response with render_pgweb

render_to_response does not work on newer django, so it needs to be
replaced. And using a speicfic context actually overcomplicates things,
it's easier to just use a wrapper function. For those cases where we
don't need NavContext, just use render() (the new shortcut function from
django), which also removes the need to use RequestContext.
This commit is contained in:
Magnus Hagander
2018-03-10 10:34:50 -05:00
parent 6ffc1d4811
commit fd37389a3b
20 changed files with 153 additions and 168 deletions

View File

@ -1,11 +1,10 @@
Navigation
==========
The navigation system is based on a django context called NavContext,
implemented in pgweb.util.contexts.NavContext. This means that all the
The navigation system is based on a django function called render_pgweb,
implemented in pgweb.util.contexts. This means that all the
menu links in the system are defined in this file
(pgweb/utils/contexts.py). Each django view needs to specify the
NavContext in it's call to template rendering, and this will make the
correct nav menu show up.
(pgweb/utils/contexts.py). Each django view needs to use render_pgweb()
instead of render(), and this will make the correct nav menu show up.
This is one of the parts of the system that can probably be made a lot
easier, leaving much room for future improvement :-)

View File

@ -2,7 +2,7 @@ from django.contrib.auth.models import User
from django.contrib.auth import login as django_login
import django.contrib.auth.views as authviews
from django.http import HttpResponseRedirect, Http404, HttpResponse
from django.shortcuts import render_to_response, get_object_or_404
from django.shortcuts import get_object_or_404
from pgweb.util.decorators import login_required
from django.utils.encoding import force_bytes
from django.utils.http import urlsafe_base64_encode
@ -21,7 +21,7 @@ import json
from datetime import datetime, timedelta
import itertools
from pgweb.util.contexts import NavContext
from pgweb.util.contexts import render_pgweb
from pgweb.util.misc import send_template_mail, generate_random_token, get_client_ip
from pgweb.util.helpers import HttpServerError
@ -52,13 +52,13 @@ def home(request):
myorgs = Organisation.objects.filter(managers=request.user, approved=False)
myproducts = Product.objects.filter(org__managers=request.user, approved=False)
myprofservs = ProfessionalService.objects.filter(org__managers=request.user, approved=False)
return render_to_response('account/index.html', {
return render_pgweb(request, 'account', 'account/index.html', {
'newsarticles': myarticles,
'events': myevents,
'organisations': myorgs,
'products': myproducts,
'profservs': myprofservs,
}, NavContext(request, 'account'))
})
objtypes = {
'news': {
@ -126,12 +126,12 @@ def profile(request):
if contrib:
contribform = ContributorForm(instance=contrib)
return render_to_response('account/userprofileform.html', {
return render_pgweb(request, 'account', 'account/userprofileform.html', {
'userform': userform,
'profileform': profileform,
'contribform': contribform,
'can_change_email': can_change_email,
}, NavContext(request, "account"))
})
@login_required
@transaction.atomic
@ -167,10 +167,10 @@ def change_email(request):
else:
form = ChangeEmailForm(request.user)
return render_to_response('account/emailchangeform.html', {
return render_pgweb(request, 'account', 'account/emailchangeform.html', {
'form': form,
'token': token,
}, NavContext(request, "account"))
})
@login_required
@transaction.atomic
@ -189,10 +189,10 @@ def confirm_change_email(request, tokenhash):
request.user.save()
token.delete()
return render_to_response('account/emailchangecompleted.html', {
return render_pgweb(request, 'account', 'account/emailchangecompleted.html', {
'token': tokenhash,
'success': token and True or False,
}, NavContext(request, "account"))
})
@login_required
def listobjects(request, objtype):
@ -200,20 +200,20 @@ def listobjects(request, objtype):
raise Http404("Object type not found")
o = objtypes[objtype]
return render_to_response('account/objectlist.html', {
return render_pgweb(request, 'account', 'account/objectlist.html', {
'objects': o['objects'](request.user),
'title': o['title'],
'submit_header': o.has_key('submit_header') and o['submit_header'] or None,
'suburl': objtype,
}, NavContext(request, 'account'))
})
@login_required
def orglist(request):
orgs = Organisation.objects.filter(approved=True)
return render_to_response('account/orglist.html', {
return render_pgweb(request, 'account', 'account/orglist.html', {
'orgs': orgs,
}, NavContext(request, 'account'))
})
def login(request):
return authviews.login(request, template_name='account/login.html',
@ -304,7 +304,7 @@ def signup(request):
else:
form = SignupForm(get_client_ip(request))
return render_to_response('base/form.html', {
return render_pgweb(request, 'account', 'base/form.html', {
'form': form,
'formitemtype': 'Account',
'form_intro': """
@ -315,12 +315,12 @@ content is available for reading without an account.
'savebutton': 'Sign up',
'operation': 'New',
'recaptcha': True,
}, NavContext(request, 'account'))
})
def signup_complete(request):
return render_to_response('account/signup_complete.html', {
}, NavContext(request, 'account'))
return render_pgweb(request, 'account', 'account/signup_complete.html', {
})
@transaction.atomic
@ -392,12 +392,12 @@ def signup_oauth(request):
'last_name': request.session['oauth_lastname'][:30],
})
return render_to_response('account/signup_oauth.html', {
return render_pgweb(request, 'account', 'account/signup_oauth.html', {
'form': form,
'operation': 'New account',
'savebutton': 'Sign up for new account',
'recaptcha': True,
}, NavContext(request, 'account'))
})
####
## Community authentication endpoint
@ -458,17 +458,17 @@ def communityauth(request, siteid):
# course, we fill a structure with information about the user.
if request.user.first_name=='' or request.user.last_name=='' or request.user.email=='':
return render_to_response('account/communityauth_noinfo.html', {
}, NavContext(request, 'account'))
return render_pgweb(request, 'account', 'account/communityauth_noinfo.html', {
})
# Check for cooloff period
if site.cooloff_hours > 0:
if (datetime.now() - request.user.date_joined) < timedelta(hours=site.cooloff_hours):
log.warning("User {0} tried to log in to {1} before cooloff period ended.".format(
request.user.username, site.name))
return render_to_response('account/communityauth_cooloff.html', {
return render_pgweb(request, 'account', 'account/communityauth_cooloff.html', {
'site': site,
}, NavContext(request, 'account'))
})
info = {
'u': request.user.username.encode('utf-8'),

View File

@ -1,11 +1,9 @@
from django.shortcuts import render_to_response
from pgweb.util.contexts import NavContext
from pgweb.util.contexts import render_pgweb
from models import ContributorType
def completelist(request):
contributortypes = list(ContributorType.objects.all())
return render_to_response('contributors/list.html', {
return render_pgweb(request, 'community', 'contributors/list.html', {
'contributortypes': contributortypes,
}, NavContext(request, 'community'))
})

View File

@ -1,4 +1,4 @@
from django.shortcuts import render_to_response
from django.shortcuts import render
from django.http import HttpResponse, Http404, HttpResponseRedirect
from django.http import HttpResponseNotModified
from django.template import TemplateDoesNotExist, loader
@ -17,7 +17,7 @@ import re
import urllib
from pgweb.util.decorators import cache, nocache
from pgweb.util.contexts import NavContext
from pgweb.util.contexts import render_pgweb, get_nav_menu
from pgweb.util.helpers import simple_form, PgXmlHelper, HttpServerError
from pgweb.util.moderation import get_all_pending_moderations
from pgweb.util.misc import get_client_ip, varnish_purge
@ -35,7 +35,6 @@ from pgweb.survey.models import Survey
# models and forms needed for core objects
from models import Organisation
from forms import OrganisationForm, MergeOrgsForm
from django.template.context import RequestContext
# Front page view
@cache(minutes=10)
@ -60,7 +59,7 @@ def home(request):
curs.execute("SELECT * FROM (SELECT DISTINCT(core_organisation.name) FROM events_event INNER JOIN core_organisation ON org_id=core_organisation.id WHERE startdate <= (CURRENT_DATE + '6 Months'::interval) AND enddate >= CURRENT_DATE AND events_event.approved AND training AND org_id IS NOT NULL) x ORDER BY random() LIMIT 3")
trainingcompanies = [r[0] for r in curs.fetchall()]
return render_to_response('index.html', {
return render(request, 'index.html', {
'title': 'The world\'s most advanced open source database',
'news': news,
'newstags': NewsTag.objects.all(),
@ -71,7 +70,7 @@ def home(request):
'quote': quote,
'versions': versions,
'planet': planet,
}, RequestContext(request))
})
# Community main page (contains surveys and potentially more)
def community(request):
@ -81,16 +80,16 @@ def community(request):
except:
s = None
planet = ImportedRSSItem.objects.filter(feed__internalname="planet").order_by("-posttime")[:7]
return render_to_response('core/community.html', {
return render_pgweb(request, 'community', 'core/community.html', {
'survey': s,
'planet': planet,
}, NavContext(request, 'community'))
})
# List of supported versions
def versions(request):
return render_to_response('support/versioning.html', {
return render_pgweb(request, 'support', 'support/versioning.html', {
'versions': Version.objects.filter(tree__gt=0).filter(testing=0),
}, NavContext(request, 'support'))
})
re_staticfilenames = re.compile("^[0-9A-Z/_-]+$", re.IGNORECASE)
# Generic fallback view for static pages
@ -115,7 +114,7 @@ def fallback(request, url):
navsect = url.split('/',2)[0]
except:
navsect = ''
return HttpResponse(t.render(NavContext(request, navsect)))
return HttpResponse(t.render({'navmenu': get_nav_menu(navsect)}))
# Edit-forms for core objects
@login_required
@ -225,7 +224,7 @@ def dynamic_css(request, css):
@nocache
def csrf_failure(request, reason=''):
resp = render_to_response('errors/csrf_failure.html', {
resp = render(request, 'errors/csrf_failure.html', {
'reason': reason,
})
resp.status_code = 403 # Forbidden
@ -234,7 +233,7 @@ def csrf_failure(request, reason=''):
# Basic information about the connection
@cache(seconds=30)
def system_information(request):
return render_to_response('core/system_information.html', {
return render(request,'core/system_information.html', {
'server': os.uname()[1],
'cache_server': request.META['REMOTE_ADDR'] or None,
'client_ip': get_client_ip(request),
@ -254,9 +253,9 @@ def sync_timestamp(request):
@user_passes_test(lambda u: u.is_staff)
@user_passes_test(lambda u: u.groups.filter(name='web slaves').exists())
def admin_pending(request):
return render_to_response('core/admin_pending.html', {
return render(request, 'core/admin_pending.html', {
'app_list': get_all_pending_moderations(),
}, RequestContext(request))
})
# Purge objects from varnish, for the admin pages
@login_required
@ -276,9 +275,9 @@ def admin_purge(request):
curs.execute("SELECT added, completed, consumer, mode, expr FROM varnishqueue.queue q LEFT JOIN varnishqueue.consumers c ON c.consumerid=q.consumerid ORDER BY added DESC")
latest = curs.fetchall()
return render_to_response('core/admin_purge.html', {
return render(request, 'core/admin_purge.html', {
'latest_purges': latest,
}, RequestContext(request))
})
@csrf_exempt
def api_varnish_purge(request):
@ -325,6 +324,6 @@ def admin_mergeorg(request):
else:
form = MergeOrgsForm()
return render_to_response('core/admin_mergeorg.html', {
return render(request, 'core/admin_mergeorg.html', {
'form': form,
}, RequestContext(request))
})

View File

@ -1,7 +1,6 @@
from django.shortcuts import render_to_response, get_object_or_404
from django.shortcuts import render, get_object_or_404
from django.http import HttpResponseRedirect, HttpResponsePermanentRedirect
from django.http import Http404
from django.template.context import RequestContext
from pgweb.util.decorators import login_required
from django.db.models import Q
from django.conf import settings
@ -9,7 +8,7 @@ from django.conf import settings
from decimal import Decimal
import os
from pgweb.util.contexts import NavContext
from pgweb.util.contexts import render_pgweb
from pgweb.util.helpers import template_to_string
from pgweb.util.misc import send_template_mail
@ -67,7 +66,7 @@ def docpage(request, version, typ, filename):
# Interactive documents are disabled, so redirect to static page
return HttpResponsePermanentRedirect("/docs/{0}/static/{1}.html".format(version, filename))
return render_to_response('docs/docspage.html', {
return render(request, 'docs/docspage.html', {
'page': page,
'supported_versions': [v for v in versions if v.supported],
'devel_versions': [v for v in versions if not v.supported and v.testing],
@ -75,7 +74,7 @@ def docpage(request, version, typ, filename):
'title': page.title,
'doc_index_filename': indexname,
'loaddate': loaddate,
}, RequestContext(request))
})
def docsrootpage(request, version, typ):
return docpage(request, version, typ, 'index')
@ -85,9 +84,9 @@ def redirect_root(request, version):
def root(request):
versions = Version.objects.filter(Q(supported=True) | Q(testing__gt=0,tree__gt=0)).order_by('-tree')
return render_to_response('docs/index.html', {
return render_pgweb(request, 'docs', 'docs/index.html', {
'versions': versions,
}, NavContext(request, 'docs'))
})
class _VersionPdfWrapper(Version):
"""
@ -117,15 +116,15 @@ class _VersionPdfWrapper(Version):
def manuals(request):
versions = Version.objects.filter(Q(supported=True) | Q(testing__gt=0,tree__gt=0)).order_by('-tree')
return render_to_response('docs/manuals.html', {
return render_pgweb(request, 'docs', 'docs/manuals.html', {
'versions': [_VersionPdfWrapper(v) for v in versions],
}, NavContext(request, 'docs'))
})
def manualarchive(request):
versions = Version.objects.filter(testing=0,supported=False,tree__gt=0).order_by('-tree')
return render_to_response('docs/archive.html', {
return render_pgweb(request, 'docs', 'docs/archive.html', {
'versions': [_VersionPdfWrapper(v) for v in versions],
}, NavContext(request, 'docs'))
})
@login_required
def commentform(request, itemid, version, filename):
@ -149,19 +148,18 @@ def commentform(request, itemid, version, filename):
replyto='%s, %s' % (form.cleaned_data['email'], settings.DOCSREPORT_EMAIL),
sendername='PG Doc comments form'
)
return render_to_response('docs/docsbug_completed.html', {
}, NavContext(request, 'docs'))
return render_pgweb(request, 'docs', 'docs/docsbug_completed.html', {})
else:
form = DocCommentForm(initial={
'name': '%s %s' % (request.user.first_name, request.user.last_name),
'email': request.user.email,
})
return render_to_response('base/form.html', {
return render_pgweb(request, 'docs', 'base/form.html', {
'form': form,
'formitemtype': 'documentation correction',
'operation': 'Submit',
'form_intro': template_to_string('docs/docsbug.html', {
'user': request.user,
}),
}, NavContext(request, 'docs'))
})

View File

@ -1,5 +1,5 @@
from django.core.urlresolvers import reverse
from django.shortcuts import render_to_response, get_object_or_404
from django.shortcuts import render, get_object_or_404
from django.http import HttpResponse, Http404, HttpResponseRedirect
from pgweb.util.decorators import login_required
from django.views.decorators.csrf import csrf_exempt
@ -12,7 +12,7 @@ import cPickle as pickle
import json
from pgweb.util.decorators import nocache
from pgweb.util.contexts import NavContext
from pgweb.util.contexts import render_pgweb
from pgweb.util.helpers import simple_form, PgXmlHelper, HttpServerError
from pgweb.util.misc import get_client_ip, varnish_purge, version_sort
@ -110,7 +110,7 @@ def ftpbrowser(request, subpath):
del node
return render_to_response('downloads/ftpbrowser.html', {
return render_pgweb(request, 'download', 'downloads/ftpbrowser.html', {
'basepath': subpath.rstrip('/'),
'directories': directories,
'files': sorted(files),
@ -118,7 +118,7 @@ def ftpbrowser(request, subpath):
'readme': file_readme,
'messagefile': file_message,
'maintainer': file_maintainer,
}, NavContext(request, 'download'))
})
# Accept an upload of the ftpsite pickle. This is fairly resource consuming,
@ -197,7 +197,7 @@ def mirrorselect(request, path):
def yum_js(request):
with open(settings.YUM_JSON) as f:
jsonstr = f.read()
return render_to_response('downloads/js/yum.js', {
return render(request, 'downloads/js/yum.js', {
'json': jsonstr,
'supported_versions': ','.join([str(v.numtree) for v in Version.objects.filter(supported=True)]),
}, content_type='application/json')
@ -207,18 +207,18 @@ def yum_js(request):
#######
def categorylist(request):
categories = Category.objects.all()
return render_to_response('downloads/categorylist.html', {
return render_pgweb(request, 'download', 'downloads/categorylist.html', {
'categories': categories,
}, NavContext(request, 'download'))
})
def productlist(request, catid, junk=None):
category = get_object_or_404(Category, pk=catid)
products = Product.objects.select_related('org','licencetype').filter(category=category, approved=True)
return render_to_response('downloads/productlist.html', {
return render_pgweb(request, 'download', 'downloads/productlist.html', {
'category': category,
'products': products,
'productcount': len(products),
}, NavContext(request, 'download'))
})
@login_required
def productform(request, itemid):

View File

@ -1,10 +1,10 @@
from django.shortcuts import render_to_response, get_object_or_404
from django.shortcuts import get_object_or_404
from django.http import Http404
from pgweb.util.decorators import login_required
from datetime import date
from pgweb.util.contexts import NavContext
from pgweb.util.contexts import render_pgweb
from pgweb.util.helpers import simple_form
from models import Event
@ -14,25 +14,25 @@ def main(request):
community_events = Event.objects.select_related('country').filter(approved=True, badged=True).filter(training=False, enddate__gt=date.today()).order_by('enddate', 'startdate',)
other_events = Event.objects.select_related('country').filter(approved=True, badged=False).filter(training=False, enddate__gt=date.today()).order_by('enddate', 'startdate',)
training = Event.objects.select_related('country').filter(approved=True).filter(training=True, enddate__gt=date.today()).order_by('enddate', 'startdate',)
return render_to_response('events/archive.html', {
return render_pgweb(request, 'about', 'events/archive.html', {
'title': 'Upcoming events',
'eventblocks': (
{ 'name': 'Community Events', 'events': community_events, 'link': '',},
{ 'name': 'Other Events', 'events': other_events, 'link': '',},
{ 'name': 'Training', 'events': training, 'link': 'training/',},
),
}, NavContext(request, 'about'))
})
def _eventarchive(request, training, title):
# Hardcode to the latest 100 events. Do we need paging too?
events = Event.objects.select_related('country').filter(approved=True).filter(training=training, enddate__lte=date.today()).order_by('-enddate', '-startdate',)[:100]
return render_to_response('events/archive.html', {
return render_pgweb(request, 'about', 'events/archive.html', {
'title': '%s Archive' % title,
'archive': True,
'eventblocks': (
{'name': title, 'events': events, },
),
}, NavContext(request, 'about'))
})
def archive(request):
return _eventarchive(request, False, 'Event')
@ -44,9 +44,9 @@ def item(request, itemid, throwaway=None):
event = get_object_or_404(Event, pk=itemid)
if not event.approved:
raise Http404
return render_to_response('events/item.html', {
return render_pgweb(request, 'about', 'events/item.html', {
'obj': event,
}, NavContext(request, 'about'))
})
@login_required
def form(request, itemid):

View File

@ -1,6 +1,6 @@
from django.shortcuts import render_to_response, get_object_or_404
from django.shortcuts import get_object_or_404
from pgweb.util.contexts import NavContext
from pgweb.util.contexts import render_pgweb
from pgweb.core.models import Version
from models import Feature
@ -24,13 +24,13 @@ def root(request):
groups.append(currentgroup)
eol_versions = [v.tree for v in Version.objects.filter(supported=False, testing=False)]
return render_to_response('featurematrix/featurematrix.html', {
return render_pgweb(request, 'about', 'featurematrix/featurematrix.html', {
'groups': groups,
'eol_versions': eol_versions,
}, NavContext(request, 'about'))
})
def detail(request, featureid):
feature = get_object_or_404(Feature, pk=featureid)
return render_to_response('featurematrix/featuredetail.html', {
return render_pgweb(request, 'about', 'featurematrix/featuredetail.html', {
'feature': feature,
}, NavContext(request, 'about'))
})

View File

@ -1,4 +1,4 @@
from django.shortcuts import render_to_response, get_object_or_404
from django.shortcuts import get_object_or_404
from django.http import HttpResponse, HttpResponseForbidden
from django.views.decorators.csrf import csrf_exempt
from django.conf import settings

View File

@ -1,4 +1,3 @@
from django.shortcuts import render_to_response
from pgweb.util.decorators import login_required
from django.http import HttpResponse
from django.db import connection
@ -6,7 +5,7 @@ from django.conf import settings
import os
from pgweb.util.contexts import NavContext
from pgweb.util.contexts import render_pgweb
from pgweb.util.helpers import template_to_string
from pgweb.util.misc import send_template_mail
@ -38,9 +37,9 @@ def submitbug(request):
sendername="PG Bug reporting form",
)
return render_to_response('misc/bug_completed.html', {
return render_pgweb(request, 'support', 'misc/bug_completed.html', {
'bugid': bugid,
}, NavContext(request, 'support'))
})
else:
form = SubmitBugForm(initial={
'name': '%s %s' % (request.user.first_name, request.user.last_name),
@ -49,14 +48,14 @@ def submitbug(request):
versions = Version.objects.filter(supported=True)
return render_to_response('base/form.html', {
return render_pgweb(request, 'support', 'base/form.html', {
'form': form,
'formitemtype': 'bug report',
'operation': 'Submit',
'form_intro': template_to_string('misc/bug_header.html', {
'supportedversions': versions,
}),
}, NavContext(request, 'support'))
})
# A crash testing URL. If the file /tmp/crashtest exists, raise a http 500

View File

@ -1,8 +1,8 @@
from django.shortcuts import render_to_response, get_object_or_404
from django.shortcuts import get_object_or_404
from django.http import HttpResponse, Http404
from pgweb.util.decorators import login_required
from pgweb.util.contexts import NavContext
from pgweb.util.contexts import render_pgweb
from pgweb.util.helpers import simple_form
from models import NewsArticle, NewsTag
@ -17,20 +17,20 @@ def archive(request, tag=None, paging=None):
else:
tag = None
news = NewsArticle.objects.filter(approved=True)
return render_to_response('news/newsarchive.html', {
return render_pgweb(request, 'about', 'news/newsarchive.html', {
'news': news,
'tag': tag,
'newstags': NewsTag.objects.all(),
}, NavContext(request, 'about'))
})
def item(request, itemid, throwaway=None):
news = get_object_or_404(NewsArticle, pk=itemid)
if not news.approved:
raise Http404
return render_to_response('news/item.html', {
return render_pgweb(request, 'about', 'news/item.html', {
'obj': news,
'newstags': NewsTag.objects.all(),
}, NavContext(request, 'about'))
})
def taglist_json(request):
return HttpResponse(json.dumps({

View File

@ -1,8 +1,7 @@
from django.shortcuts import render_to_response
from django.http import Http404
from pgweb.util.decorators import login_required
from pgweb.util.contexts import NavContext
from pgweb.util.contexts import render_pgweb
from pgweb.util.helpers import simple_form
from models import ProfessionalService
@ -21,12 +20,12 @@ def root(request, servtype):
title = servtype=='support' and 'Professional Services' or 'Hosting Providers'
what = servtype=='support' and 'support' or 'hosting'
support = servtype=='support'
return render_to_response('profserv/root.html', {
return render_pgweb(request, 'support', 'profserv/root.html', {
'title': title,
'support': support,
'regions': regions,
'what': what,
}, NavContext(request, 'support'))
})
def region(request, servtype, regionname):
@ -44,14 +43,14 @@ def region(request, servtype, regionname):
# Field names are cleaned up earlier, so it's safe against injections.
services = ProfessionalService.objects.select_related('org').filter(approved=True).extra(where=["region_%s AND provides_%s" % (regionname, what),])
return render_to_response('profserv/list.html', {
return render_pgweb(request, 'support', 'profserv/list.html', {
'title': title,
'support': support,
'what': what,
'whatname': whatname,
'regionname': regname,
'services': services,
}, NavContext(request, 'support'))
})
# Forms to edit

View File

@ -1,6 +1,4 @@
from django.shortcuts import render_to_response
from pgweb.util.contexts import NavContext
from pgweb.util.contexts import render_pgweb
from models import PUG
@ -17,6 +15,6 @@ def index(request):
'country': pug.country.name,
'pugs': [pug]
})
return render_to_response('pugs/index.html', {
return render_pgweb(request, 'community', 'pugs/index.html', {
'pug_list': pug_list,
}, NavContext(request, 'community'))
})

View File

@ -1,11 +1,9 @@
from django.shortcuts import render_to_response
from pgweb.util.contexts import NavContext
from pgweb.util.contexts import render_pgweb
from models import Quote
def allquotes(request):
quotes = Quote.objects.filter(approved=True)
return render_to_response('quotes/quotelist.html', {
return render_pgweb(request, 'about', 'quotes/quotelist.html', {
'quotes': quotes,
}, NavContext(request, 'about'))
})

View File

@ -1,5 +1,4 @@
from django.shortcuts import render_to_response
from django.template.context import RequestContext
from django.shortcuts import render
from django.http import HttpResponseRedirect
from django.views.decorators.csrf import csrf_exempt
from django.conf import settings
@ -130,25 +129,25 @@ def search(request):
# Check that we actually have something to search for
if not request.GET.has_key('q') or request.GET['q'] == '':
if searchlists:
return render_to_response('search/listsearch.html', {
return render(request, 'search/listsearch.html', {
'search_error': "No search term specified.",
'sortoptions': sortoptions,
'lists': MailingList.objects.all().order_by("group__sortkey"),
'listid': listid,
'dates': dateoptions,
'dateval': dateval,
}, RequestContext(request))
})
else:
return render_to_response('search/sitesearch.html', {
return render(request, 'search/sitesearch.html', {
'search_error': "No search term specified.",
}, RequestContext(request))
})
query = request.GET['q'].strip()
# Anti-stefan prevention
if len(query) > 1000:
return render_to_response('search/sitesearch.html', {
return render(request, 'search/sitesearch.html', {
'search_error': "Search term too long.",
}, RequestContext(request))
})
# Is the request being paged?
if request.GET.has_key('p'):
@ -199,14 +198,14 @@ def search(request):
try:
r = c.getresponse()
except (socket.timeout, ssl.SSLError):
return render_to_response('search/listsearch.html', {
return render(request, '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', {
return render(request, '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...
@ -229,7 +228,7 @@ def search(request):
listsort
)
return render_to_response('search/listsearch.html', {
return render(request, 'search/listsearch.html', {
'hitcount': totalhits,
'firsthit': firsthit,
'lasthit': min(totalhits, firsthit+hitsperpage-1),
@ -251,7 +250,7 @@ def search(request):
'listid': listid,
'dates': dateoptions,
'dateval': dateval,
}, RequestContext(request))
})
else:
# Website search is still done by making a regular pgsql connection
@ -260,9 +259,9 @@ def search(request):
conn = psycopg2.connect(settings.SEARCH_DSN)
curs = conn.cursor()
except:
return render_to_response('search/sitesearch.html', {
return render(request, 'search/sitesearch.html', {
'search_error': 'Could not connect to search database.'
}, RequestContext(request))
})
# This is kind of a hack, but... Some URLs are flagged as internal
# and should as such only be included in searches that explicitly
@ -283,9 +282,9 @@ def search(request):
'internal': include_internal,
})
except psycopg2.ProgrammingError:
return render_to_response('search/sitesearch.html', {
return render(request, 'search/sitesearch.html', {
'search_error': 'Error executing search query.'
}, RequestContext(request))
})
hits = curs.fetchall()
conn.close()
@ -296,7 +295,7 @@ def search(request):
suburl and urllib.quote_plus(suburl) or '',
)
return render_to_response('search/sitesearch.html', {
return render(request, 'search/sitesearch.html', {
'suburl': suburl,
'allsites': allsites,
'hitcount': totalhits,
@ -312,4 +311,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))
})

View File

@ -1,6 +1,6 @@
from django.shortcuts import render_to_response, get_object_or_404
from django.shortcuts import get_object_or_404
from pgweb.util.contexts import NavContext
from pgweb.util.contexts import render_pgweb
from pgweb.core.models import Version
from models import SecurityPatch
@ -11,13 +11,13 @@ def GetPatchesList(filt):
def _list_patches(request, filt):
patches = GetPatchesList(filt)
return render_to_response('security/security.html', {
return render_pgweb(request, 'support', 'security/security.html', {
'patches': patches,
'supported': Version.objects.filter(supported=True),
'unsupported': Version.objects.filter(supported=False, tree__gt=0).extra(
where=["EXISTS (SELECT 1 FROM security_securitypatchversion pv WHERE pv.version_id=core_version.id)"],
),
}, NavContext(request, 'support'))
})
def index(request):
# Show all supported versions

View File

@ -1,6 +1,4 @@
from django.shortcuts import render_to_response
from pgweb.util.contexts import NavContext
from pgweb.util.contexts import render_pgweb
from pgweb.util.decorators import cache
from models import Sponsor, Server
@ -8,12 +6,12 @@ from models import Sponsor, Server
@cache(minutes=30)
def sponsors(request):
sponsors = Sponsor.objects.select_related().filter(sponsortype__sortkey__gt=0).order_by('sponsortype__sortkey' ,'?')
return render_to_response('sponsors/sponsors.html', {
return render_pgweb(request, 'about', 'sponsors/sponsors.html', {
'sponsors': sponsors,
}, NavContext(request, 'about'))
})
def servers(request):
servers = Server.objects.select_related().all()
return render_to_response('sponsors/servers.html', {
return render_pgweb(request, 'about', 'sponsors/servers.html', {
'servers': servers,
}, NavContext(request, 'about'))
})

View File

@ -1,10 +1,10 @@
from django.shortcuts import render_to_response, get_object_or_404
from django.shortcuts import get_object_or_404
from django.http import HttpResponseRedirect
from django.db import connection, transaction
from django.template.defaultfilters import slugify
from django.views.decorators.csrf import csrf_exempt
from pgweb.util.contexts import NavContext
from pgweb.util.contexts import render_pgweb
from pgweb.util.misc import get_client_ip, varnish_purge
from pgweb.util.helpers import HttpServerError
@ -14,10 +14,10 @@ def results(request, surveyid, junk=None):
survey = get_object_or_404(Survey, pk=surveyid)
surveylist = Survey.objects.all().order_by('-posted')
return render_to_response('survey/results.html', {
return render_pgweb(request, 'community', 'survey/results.html', {
'survey': survey,
'surveylist': surveylist,
}, NavContext(request, 'community'))
})
# Served over insecure HTTP, the Varnish proxy strips cookies
@csrf_exempt

View File

@ -1,5 +1,5 @@
from django.template import RequestContext
from django.utils.functional import SimpleLazyObject
from django.shortcuts import render
from django.conf import settings
# This is the whole site navigation structure. Stick in a smarter file?
@ -91,15 +91,15 @@ sitenav = {
}
class NavContext(RequestContext):
def __init__(self, request, section):
RequestContext.__init__(self, request)
if sitenav.has_key(section):
navsection = sitenav[section]
else:
navsection = {}
self.update({'navmenu': navsection})
def get_nav_menu(section):
if sitenav.has_key(section):
return sitenav[section]
else:
return {}
def render_pgweb(request, section, template, context):
context['navmenu'] = get_nav_menu(section)
return render(request, template, context)
def _get_gitrev():
# Return the current git revision, that is used for

View File

@ -1,5 +1,5 @@
from django.shortcuts import render_to_response, get_object_or_404
from pgweb.util.contexts import NavContext
from django.shortcuts import render, get_object_or_404
from pgweb.util.contexts import render_pgweb
from django.http import HttpResponseRedirect, Http404
from django.template import Context
from django.template.loader import get_template
@ -63,7 +63,7 @@ def simple_form(instancetype, itemid, request, formclass, formtemplate='base/for
else:
described_checkboxes = None
return render_to_response(formtemplate, {
return render_pgweb(request, navsection, formtemplate, {
'form': form,
'formitemtype': instance._meta.verbose_name,
'markdownfields': markdownfields,
@ -73,13 +73,13 @@ def simple_form(instancetype, itemid, request, formclass, formtemplate='base/for
'jquery': hasattr(form, 'jquery') and form.jquery or None,
'savebutton': (itemid == "new") and "New" or "Save",
'operation': (itemid == "new") and "New" or "Edit",
}, NavContext(request, navsection))
})
def template_to_string(templatename, attrs = {}):
return get_template(templatename).render(Context(attrs))
def HttpServerError(msg):
r = render_to_response('errors/500.html', {
r = render(request, 'errors/500.html', {
'message': msg,
})
r.status_code = 500