mirror of
https://github.com/postgres/pgweb.git
synced 2025-08-13 13:12:42 +00:00
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:
@ -1,11 +1,10 @@
|
|||||||
Navigation
|
Navigation
|
||||||
==========
|
==========
|
||||||
The navigation system is based on a django context called NavContext,
|
The navigation system is based on a django function called render_pgweb,
|
||||||
implemented in pgweb.util.contexts.NavContext. This means that all the
|
implemented in pgweb.util.contexts. This means that all the
|
||||||
menu links in the system are defined in this file
|
menu links in the system are defined in this file
|
||||||
(pgweb/utils/contexts.py). Each django view needs to specify the
|
(pgweb/utils/contexts.py). Each django view needs to use render_pgweb()
|
||||||
NavContext in it's call to template rendering, and this will make the
|
instead of render(), and this will make the correct nav menu show up.
|
||||||
correct nav menu show up.
|
|
||||||
|
|
||||||
This is one of the parts of the system that can probably be made a lot
|
This is one of the parts of the system that can probably be made a lot
|
||||||
easier, leaving much room for future improvement :-)
|
easier, leaving much room for future improvement :-)
|
||||||
|
@ -2,7 +2,7 @@ from django.contrib.auth.models import User
|
|||||||
from django.contrib.auth import login as django_login
|
from django.contrib.auth import login as django_login
|
||||||
import django.contrib.auth.views as authviews
|
import django.contrib.auth.views as authviews
|
||||||
from django.http import HttpResponseRedirect, Http404, HttpResponse
|
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 pgweb.util.decorators import login_required
|
||||||
from django.utils.encoding import force_bytes
|
from django.utils.encoding import force_bytes
|
||||||
from django.utils.http import urlsafe_base64_encode
|
from django.utils.http import urlsafe_base64_encode
|
||||||
@ -21,7 +21,7 @@ import json
|
|||||||
from datetime import datetime, timedelta
|
from datetime import datetime, timedelta
|
||||||
import itertools
|
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.misc import send_template_mail, generate_random_token, get_client_ip
|
||||||
from pgweb.util.helpers import HttpServerError
|
from pgweb.util.helpers import HttpServerError
|
||||||
|
|
||||||
@ -52,13 +52,13 @@ def home(request):
|
|||||||
myorgs = Organisation.objects.filter(managers=request.user, approved=False)
|
myorgs = Organisation.objects.filter(managers=request.user, approved=False)
|
||||||
myproducts = Product.objects.filter(org__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)
|
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,
|
'newsarticles': myarticles,
|
||||||
'events': myevents,
|
'events': myevents,
|
||||||
'organisations': myorgs,
|
'organisations': myorgs,
|
||||||
'products': myproducts,
|
'products': myproducts,
|
||||||
'profservs': myprofservs,
|
'profservs': myprofservs,
|
||||||
}, NavContext(request, 'account'))
|
})
|
||||||
|
|
||||||
objtypes = {
|
objtypes = {
|
||||||
'news': {
|
'news': {
|
||||||
@ -126,12 +126,12 @@ def profile(request):
|
|||||||
if contrib:
|
if contrib:
|
||||||
contribform = ContributorForm(instance=contrib)
|
contribform = ContributorForm(instance=contrib)
|
||||||
|
|
||||||
return render_to_response('account/userprofileform.html', {
|
return render_pgweb(request, 'account', 'account/userprofileform.html', {
|
||||||
'userform': userform,
|
'userform': userform,
|
||||||
'profileform': profileform,
|
'profileform': profileform,
|
||||||
'contribform': contribform,
|
'contribform': contribform,
|
||||||
'can_change_email': can_change_email,
|
'can_change_email': can_change_email,
|
||||||
}, NavContext(request, "account"))
|
})
|
||||||
|
|
||||||
@login_required
|
@login_required
|
||||||
@transaction.atomic
|
@transaction.atomic
|
||||||
@ -167,10 +167,10 @@ def change_email(request):
|
|||||||
else:
|
else:
|
||||||
form = ChangeEmailForm(request.user)
|
form = ChangeEmailForm(request.user)
|
||||||
|
|
||||||
return render_to_response('account/emailchangeform.html', {
|
return render_pgweb(request, 'account', 'account/emailchangeform.html', {
|
||||||
'form': form,
|
'form': form,
|
||||||
'token': token,
|
'token': token,
|
||||||
}, NavContext(request, "account"))
|
})
|
||||||
|
|
||||||
@login_required
|
@login_required
|
||||||
@transaction.atomic
|
@transaction.atomic
|
||||||
@ -189,10 +189,10 @@ def confirm_change_email(request, tokenhash):
|
|||||||
request.user.save()
|
request.user.save()
|
||||||
token.delete()
|
token.delete()
|
||||||
|
|
||||||
return render_to_response('account/emailchangecompleted.html', {
|
return render_pgweb(request, 'account', 'account/emailchangecompleted.html', {
|
||||||
'token': tokenhash,
|
'token': tokenhash,
|
||||||
'success': token and True or False,
|
'success': token and True or False,
|
||||||
}, NavContext(request, "account"))
|
})
|
||||||
|
|
||||||
@login_required
|
@login_required
|
||||||
def listobjects(request, objtype):
|
def listobjects(request, objtype):
|
||||||
@ -200,20 +200,20 @@ def listobjects(request, objtype):
|
|||||||
raise Http404("Object type not found")
|
raise Http404("Object type not found")
|
||||||
o = objtypes[objtype]
|
o = objtypes[objtype]
|
||||||
|
|
||||||
return render_to_response('account/objectlist.html', {
|
return render_pgweb(request, 'account', 'account/objectlist.html', {
|
||||||
'objects': o['objects'](request.user),
|
'objects': o['objects'](request.user),
|
||||||
'title': o['title'],
|
'title': o['title'],
|
||||||
'submit_header': o.has_key('submit_header') and o['submit_header'] or None,
|
'submit_header': o.has_key('submit_header') and o['submit_header'] or None,
|
||||||
'suburl': objtype,
|
'suburl': objtype,
|
||||||
}, NavContext(request, 'account'))
|
})
|
||||||
|
|
||||||
@login_required
|
@login_required
|
||||||
def orglist(request):
|
def orglist(request):
|
||||||
orgs = Organisation.objects.filter(approved=True)
|
orgs = Organisation.objects.filter(approved=True)
|
||||||
|
|
||||||
return render_to_response('account/orglist.html', {
|
return render_pgweb(request, 'account', 'account/orglist.html', {
|
||||||
'orgs': orgs,
|
'orgs': orgs,
|
||||||
}, NavContext(request, 'account'))
|
})
|
||||||
|
|
||||||
def login(request):
|
def login(request):
|
||||||
return authviews.login(request, template_name='account/login.html',
|
return authviews.login(request, template_name='account/login.html',
|
||||||
@ -304,7 +304,7 @@ def signup(request):
|
|||||||
else:
|
else:
|
||||||
form = SignupForm(get_client_ip(request))
|
form = SignupForm(get_client_ip(request))
|
||||||
|
|
||||||
return render_to_response('base/form.html', {
|
return render_pgweb(request, 'account', 'base/form.html', {
|
||||||
'form': form,
|
'form': form,
|
||||||
'formitemtype': 'Account',
|
'formitemtype': 'Account',
|
||||||
'form_intro': """
|
'form_intro': """
|
||||||
@ -315,12 +315,12 @@ content is available for reading without an account.
|
|||||||
'savebutton': 'Sign up',
|
'savebutton': 'Sign up',
|
||||||
'operation': 'New',
|
'operation': 'New',
|
||||||
'recaptcha': True,
|
'recaptcha': True,
|
||||||
}, NavContext(request, 'account'))
|
})
|
||||||
|
|
||||||
|
|
||||||
def signup_complete(request):
|
def signup_complete(request):
|
||||||
return render_to_response('account/signup_complete.html', {
|
return render_pgweb(request, 'account', 'account/signup_complete.html', {
|
||||||
}, NavContext(request, 'account'))
|
})
|
||||||
|
|
||||||
|
|
||||||
@transaction.atomic
|
@transaction.atomic
|
||||||
@ -392,12 +392,12 @@ def signup_oauth(request):
|
|||||||
'last_name': request.session['oauth_lastname'][:30],
|
'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,
|
'form': form,
|
||||||
'operation': 'New account',
|
'operation': 'New account',
|
||||||
'savebutton': 'Sign up for new account',
|
'savebutton': 'Sign up for new account',
|
||||||
'recaptcha': True,
|
'recaptcha': True,
|
||||||
}, NavContext(request, 'account'))
|
})
|
||||||
|
|
||||||
####
|
####
|
||||||
## Community authentication endpoint
|
## Community authentication endpoint
|
||||||
@ -458,17 +458,17 @@ def communityauth(request, siteid):
|
|||||||
# course, we fill a structure with information about the user.
|
# course, we fill a structure with information about the user.
|
||||||
|
|
||||||
if request.user.first_name=='' or request.user.last_name=='' or request.user.email=='':
|
if request.user.first_name=='' or request.user.last_name=='' or request.user.email=='':
|
||||||
return render_to_response('account/communityauth_noinfo.html', {
|
return render_pgweb(request, 'account', 'account/communityauth_noinfo.html', {
|
||||||
}, NavContext(request, 'account'))
|
})
|
||||||
|
|
||||||
# Check for cooloff period
|
# Check for cooloff period
|
||||||
if site.cooloff_hours > 0:
|
if site.cooloff_hours > 0:
|
||||||
if (datetime.now() - request.user.date_joined) < timedelta(hours=site.cooloff_hours):
|
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(
|
log.warning("User {0} tried to log in to {1} before cooloff period ended.".format(
|
||||||
request.user.username, site.name))
|
request.user.username, site.name))
|
||||||
return render_to_response('account/communityauth_cooloff.html', {
|
return render_pgweb(request, 'account', 'account/communityauth_cooloff.html', {
|
||||||
'site': site,
|
'site': site,
|
||||||
}, NavContext(request, 'account'))
|
})
|
||||||
|
|
||||||
info = {
|
info = {
|
||||||
'u': request.user.username.encode('utf-8'),
|
'u': request.user.username.encode('utf-8'),
|
||||||
|
@ -1,11 +1,9 @@
|
|||||||
from django.shortcuts import render_to_response
|
from pgweb.util.contexts import render_pgweb
|
||||||
|
|
||||||
from pgweb.util.contexts import NavContext
|
|
||||||
|
|
||||||
from models import ContributorType
|
from models import ContributorType
|
||||||
|
|
||||||
def completelist(request):
|
def completelist(request):
|
||||||
contributortypes = list(ContributorType.objects.all())
|
contributortypes = list(ContributorType.objects.all())
|
||||||
return render_to_response('contributors/list.html', {
|
return render_pgweb(request, 'community', 'contributors/list.html', {
|
||||||
'contributortypes': contributortypes,
|
'contributortypes': contributortypes,
|
||||||
}, NavContext(request, 'community'))
|
})
|
||||||
|
@ -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 HttpResponse, Http404, HttpResponseRedirect
|
||||||
from django.http import HttpResponseNotModified
|
from django.http import HttpResponseNotModified
|
||||||
from django.template import TemplateDoesNotExist, loader
|
from django.template import TemplateDoesNotExist, loader
|
||||||
@ -17,7 +17,7 @@ import re
|
|||||||
import urllib
|
import urllib
|
||||||
|
|
||||||
from pgweb.util.decorators import cache, nocache
|
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.helpers import simple_form, PgXmlHelper, HttpServerError
|
||||||
from pgweb.util.moderation import get_all_pending_moderations
|
from pgweb.util.moderation import get_all_pending_moderations
|
||||||
from pgweb.util.misc import get_client_ip, varnish_purge
|
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
|
# models and forms needed for core objects
|
||||||
from models import Organisation
|
from models import Organisation
|
||||||
from forms import OrganisationForm, MergeOrgsForm
|
from forms import OrganisationForm, MergeOrgsForm
|
||||||
from django.template.context import RequestContext
|
|
||||||
|
|
||||||
# Front page view
|
# Front page view
|
||||||
@cache(minutes=10)
|
@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")
|
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()]
|
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',
|
'title': 'The world\'s most advanced open source database',
|
||||||
'news': news,
|
'news': news,
|
||||||
'newstags': NewsTag.objects.all(),
|
'newstags': NewsTag.objects.all(),
|
||||||
@ -71,7 +70,7 @@ def home(request):
|
|||||||
'quote': quote,
|
'quote': quote,
|
||||||
'versions': versions,
|
'versions': versions,
|
||||||
'planet': planet,
|
'planet': planet,
|
||||||
}, RequestContext(request))
|
})
|
||||||
|
|
||||||
# Community main page (contains surveys and potentially more)
|
# Community main page (contains surveys and potentially more)
|
||||||
def community(request):
|
def community(request):
|
||||||
@ -81,16 +80,16 @@ def community(request):
|
|||||||
except:
|
except:
|
||||||
s = None
|
s = None
|
||||||
planet = ImportedRSSItem.objects.filter(feed__internalname="planet").order_by("-posttime")[:7]
|
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,
|
'survey': s,
|
||||||
'planet': planet,
|
'planet': planet,
|
||||||
}, NavContext(request, 'community'))
|
})
|
||||||
|
|
||||||
# List of supported versions
|
# List of supported versions
|
||||||
def versions(request):
|
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),
|
'versions': Version.objects.filter(tree__gt=0).filter(testing=0),
|
||||||
}, NavContext(request, 'support'))
|
})
|
||||||
|
|
||||||
re_staticfilenames = re.compile("^[0-9A-Z/_-]+$", re.IGNORECASE)
|
re_staticfilenames = re.compile("^[0-9A-Z/_-]+$", re.IGNORECASE)
|
||||||
# Generic fallback view for static pages
|
# Generic fallback view for static pages
|
||||||
@ -115,7 +114,7 @@ def fallback(request, url):
|
|||||||
navsect = url.split('/',2)[0]
|
navsect = url.split('/',2)[0]
|
||||||
except:
|
except:
|
||||||
navsect = ''
|
navsect = ''
|
||||||
return HttpResponse(t.render(NavContext(request, navsect)))
|
return HttpResponse(t.render({'navmenu': get_nav_menu(navsect)}))
|
||||||
|
|
||||||
# Edit-forms for core objects
|
# Edit-forms for core objects
|
||||||
@login_required
|
@login_required
|
||||||
@ -225,7 +224,7 @@ def dynamic_css(request, css):
|
|||||||
|
|
||||||
@nocache
|
@nocache
|
||||||
def csrf_failure(request, reason=''):
|
def csrf_failure(request, reason=''):
|
||||||
resp = render_to_response('errors/csrf_failure.html', {
|
resp = render(request, 'errors/csrf_failure.html', {
|
||||||
'reason': reason,
|
'reason': reason,
|
||||||
})
|
})
|
||||||
resp.status_code = 403 # Forbidden
|
resp.status_code = 403 # Forbidden
|
||||||
@ -234,7 +233,7 @@ def csrf_failure(request, reason=''):
|
|||||||
# Basic information about the connection
|
# Basic information about the connection
|
||||||
@cache(seconds=30)
|
@cache(seconds=30)
|
||||||
def system_information(request):
|
def system_information(request):
|
||||||
return render_to_response('core/system_information.html', {
|
return render(request,'core/system_information.html', {
|
||||||
'server': os.uname()[1],
|
'server': os.uname()[1],
|
||||||
'cache_server': request.META['REMOTE_ADDR'] or None,
|
'cache_server': request.META['REMOTE_ADDR'] or None,
|
||||||
'client_ip': get_client_ip(request),
|
'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.is_staff)
|
||||||
@user_passes_test(lambda u: u.groups.filter(name='web slaves').exists())
|
@user_passes_test(lambda u: u.groups.filter(name='web slaves').exists())
|
||||||
def admin_pending(request):
|
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(),
|
'app_list': get_all_pending_moderations(),
|
||||||
}, RequestContext(request))
|
})
|
||||||
|
|
||||||
# Purge objects from varnish, for the admin pages
|
# Purge objects from varnish, for the admin pages
|
||||||
@login_required
|
@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")
|
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()
|
latest = curs.fetchall()
|
||||||
|
|
||||||
return render_to_response('core/admin_purge.html', {
|
return render(request, 'core/admin_purge.html', {
|
||||||
'latest_purges': latest,
|
'latest_purges': latest,
|
||||||
}, RequestContext(request))
|
})
|
||||||
|
|
||||||
@csrf_exempt
|
@csrf_exempt
|
||||||
def api_varnish_purge(request):
|
def api_varnish_purge(request):
|
||||||
@ -325,6 +324,6 @@ def admin_mergeorg(request):
|
|||||||
else:
|
else:
|
||||||
form = MergeOrgsForm()
|
form = MergeOrgsForm()
|
||||||
|
|
||||||
return render_to_response('core/admin_mergeorg.html', {
|
return render(request, 'core/admin_mergeorg.html', {
|
||||||
'form': form,
|
'form': form,
|
||||||
}, RequestContext(request))
|
})
|
||||||
|
@ -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 HttpResponseRedirect, HttpResponsePermanentRedirect
|
||||||
from django.http import Http404
|
from django.http import Http404
|
||||||
from django.template.context import RequestContext
|
|
||||||
from pgweb.util.decorators import login_required
|
from pgweb.util.decorators import login_required
|
||||||
from django.db.models import Q
|
from django.db.models import Q
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
@ -9,7 +8,7 @@ from django.conf import settings
|
|||||||
from decimal import Decimal
|
from decimal import Decimal
|
||||||
import os
|
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.helpers import template_to_string
|
||||||
from pgweb.util.misc import send_template_mail
|
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
|
# Interactive documents are disabled, so redirect to static page
|
||||||
return HttpResponsePermanentRedirect("/docs/{0}/static/{1}.html".format(version, filename))
|
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,
|
'page': page,
|
||||||
'supported_versions': [v for v in versions if v.supported],
|
'supported_versions': [v for v in versions if v.supported],
|
||||||
'devel_versions': [v for v in versions if not v.supported and v.testing],
|
'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,
|
'title': page.title,
|
||||||
'doc_index_filename': indexname,
|
'doc_index_filename': indexname,
|
||||||
'loaddate': loaddate,
|
'loaddate': loaddate,
|
||||||
}, RequestContext(request))
|
})
|
||||||
|
|
||||||
def docsrootpage(request, version, typ):
|
def docsrootpage(request, version, typ):
|
||||||
return docpage(request, version, typ, 'index')
|
return docpage(request, version, typ, 'index')
|
||||||
@ -85,9 +84,9 @@ def redirect_root(request, version):
|
|||||||
|
|
||||||
def root(request):
|
def root(request):
|
||||||
versions = Version.objects.filter(Q(supported=True) | Q(testing__gt=0,tree__gt=0)).order_by('-tree')
|
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,
|
'versions': versions,
|
||||||
}, NavContext(request, 'docs'))
|
})
|
||||||
|
|
||||||
class _VersionPdfWrapper(Version):
|
class _VersionPdfWrapper(Version):
|
||||||
"""
|
"""
|
||||||
@ -117,15 +116,15 @@ class _VersionPdfWrapper(Version):
|
|||||||
|
|
||||||
def manuals(request):
|
def manuals(request):
|
||||||
versions = Version.objects.filter(Q(supported=True) | Q(testing__gt=0,tree__gt=0)).order_by('-tree')
|
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],
|
'versions': [_VersionPdfWrapper(v) for v in versions],
|
||||||
}, NavContext(request, 'docs'))
|
})
|
||||||
|
|
||||||
def manualarchive(request):
|
def manualarchive(request):
|
||||||
versions = Version.objects.filter(testing=0,supported=False,tree__gt=0).order_by('-tree')
|
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],
|
'versions': [_VersionPdfWrapper(v) for v in versions],
|
||||||
}, NavContext(request, 'docs'))
|
})
|
||||||
|
|
||||||
@login_required
|
@login_required
|
||||||
def commentform(request, itemid, version, filename):
|
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),
|
replyto='%s, %s' % (form.cleaned_data['email'], settings.DOCSREPORT_EMAIL),
|
||||||
sendername='PG Doc comments form'
|
sendername='PG Doc comments form'
|
||||||
)
|
)
|
||||||
return render_to_response('docs/docsbug_completed.html', {
|
return render_pgweb(request, 'docs', 'docs/docsbug_completed.html', {})
|
||||||
}, NavContext(request, 'docs'))
|
|
||||||
else:
|
else:
|
||||||
form = DocCommentForm(initial={
|
form = DocCommentForm(initial={
|
||||||
'name': '%s %s' % (request.user.first_name, request.user.last_name),
|
'name': '%s %s' % (request.user.first_name, request.user.last_name),
|
||||||
'email': request.user.email,
|
'email': request.user.email,
|
||||||
})
|
})
|
||||||
|
|
||||||
return render_to_response('base/form.html', {
|
return render_pgweb(request, 'docs', 'base/form.html', {
|
||||||
'form': form,
|
'form': form,
|
||||||
'formitemtype': 'documentation correction',
|
'formitemtype': 'documentation correction',
|
||||||
'operation': 'Submit',
|
'operation': 'Submit',
|
||||||
'form_intro': template_to_string('docs/docsbug.html', {
|
'form_intro': template_to_string('docs/docsbug.html', {
|
||||||
'user': request.user,
|
'user': request.user,
|
||||||
}),
|
}),
|
||||||
}, NavContext(request, 'docs'))
|
})
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
from django.core.urlresolvers import reverse
|
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 django.http import HttpResponse, Http404, HttpResponseRedirect
|
||||||
from pgweb.util.decorators import login_required
|
from pgweb.util.decorators import login_required
|
||||||
from django.views.decorators.csrf import csrf_exempt
|
from django.views.decorators.csrf import csrf_exempt
|
||||||
@ -12,7 +12,7 @@ import cPickle as pickle
|
|||||||
import json
|
import json
|
||||||
|
|
||||||
from pgweb.util.decorators import nocache
|
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.helpers import simple_form, PgXmlHelper, HttpServerError
|
||||||
from pgweb.util.misc import get_client_ip, varnish_purge, version_sort
|
from pgweb.util.misc import get_client_ip, varnish_purge, version_sort
|
||||||
|
|
||||||
@ -110,7 +110,7 @@ def ftpbrowser(request, subpath):
|
|||||||
|
|
||||||
del node
|
del node
|
||||||
|
|
||||||
return render_to_response('downloads/ftpbrowser.html', {
|
return render_pgweb(request, 'download', 'downloads/ftpbrowser.html', {
|
||||||
'basepath': subpath.rstrip('/'),
|
'basepath': subpath.rstrip('/'),
|
||||||
'directories': directories,
|
'directories': directories,
|
||||||
'files': sorted(files),
|
'files': sorted(files),
|
||||||
@ -118,7 +118,7 @@ def ftpbrowser(request, subpath):
|
|||||||
'readme': file_readme,
|
'readme': file_readme,
|
||||||
'messagefile': file_message,
|
'messagefile': file_message,
|
||||||
'maintainer': file_maintainer,
|
'maintainer': file_maintainer,
|
||||||
}, NavContext(request, 'download'))
|
})
|
||||||
|
|
||||||
|
|
||||||
# Accept an upload of the ftpsite pickle. This is fairly resource consuming,
|
# Accept an upload of the ftpsite pickle. This is fairly resource consuming,
|
||||||
@ -197,7 +197,7 @@ def mirrorselect(request, path):
|
|||||||
def yum_js(request):
|
def yum_js(request):
|
||||||
with open(settings.YUM_JSON) as f:
|
with open(settings.YUM_JSON) as f:
|
||||||
jsonstr = f.read()
|
jsonstr = f.read()
|
||||||
return render_to_response('downloads/js/yum.js', {
|
return render(request, 'downloads/js/yum.js', {
|
||||||
'json': jsonstr,
|
'json': jsonstr,
|
||||||
'supported_versions': ','.join([str(v.numtree) for v in Version.objects.filter(supported=True)]),
|
'supported_versions': ','.join([str(v.numtree) for v in Version.objects.filter(supported=True)]),
|
||||||
}, content_type='application/json')
|
}, content_type='application/json')
|
||||||
@ -207,18 +207,18 @@ def yum_js(request):
|
|||||||
#######
|
#######
|
||||||
def categorylist(request):
|
def categorylist(request):
|
||||||
categories = Category.objects.all()
|
categories = Category.objects.all()
|
||||||
return render_to_response('downloads/categorylist.html', {
|
return render_pgweb(request, 'download', 'downloads/categorylist.html', {
|
||||||
'categories': categories,
|
'categories': categories,
|
||||||
}, NavContext(request, 'download'))
|
})
|
||||||
|
|
||||||
def productlist(request, catid, junk=None):
|
def productlist(request, catid, junk=None):
|
||||||
category = get_object_or_404(Category, pk=catid)
|
category = get_object_or_404(Category, pk=catid)
|
||||||
products = Product.objects.select_related('org','licencetype').filter(category=category, approved=True)
|
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,
|
'category': category,
|
||||||
'products': products,
|
'products': products,
|
||||||
'productcount': len(products),
|
'productcount': len(products),
|
||||||
}, NavContext(request, 'download'))
|
})
|
||||||
|
|
||||||
@login_required
|
@login_required
|
||||||
def productform(request, itemid):
|
def productform(request, itemid):
|
||||||
|
@ -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 django.http import Http404
|
||||||
from pgweb.util.decorators import login_required
|
from pgweb.util.decorators import login_required
|
||||||
|
|
||||||
from datetime import date
|
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 pgweb.util.helpers import simple_form
|
||||||
|
|
||||||
from models import Event
|
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',)
|
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',)
|
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',)
|
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',
|
'title': 'Upcoming events',
|
||||||
'eventblocks': (
|
'eventblocks': (
|
||||||
{ 'name': 'Community Events', 'events': community_events, 'link': '',},
|
{ 'name': 'Community Events', 'events': community_events, 'link': '',},
|
||||||
{ 'name': 'Other Events', 'events': other_events, 'link': '',},
|
{ 'name': 'Other Events', 'events': other_events, 'link': '',},
|
||||||
{ 'name': 'Training', 'events': training, 'link': 'training/',},
|
{ 'name': 'Training', 'events': training, 'link': 'training/',},
|
||||||
),
|
),
|
||||||
}, NavContext(request, 'about'))
|
})
|
||||||
|
|
||||||
def _eventarchive(request, training, title):
|
def _eventarchive(request, training, title):
|
||||||
# Hardcode to the latest 100 events. Do we need paging too?
|
# 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]
|
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,
|
'title': '%s Archive' % title,
|
||||||
'archive': True,
|
'archive': True,
|
||||||
'eventblocks': (
|
'eventblocks': (
|
||||||
{'name': title, 'events': events, },
|
{'name': title, 'events': events, },
|
||||||
),
|
),
|
||||||
}, NavContext(request, 'about'))
|
})
|
||||||
|
|
||||||
def archive(request):
|
def archive(request):
|
||||||
return _eventarchive(request, False, 'Event')
|
return _eventarchive(request, False, 'Event')
|
||||||
@ -44,9 +44,9 @@ def item(request, itemid, throwaway=None):
|
|||||||
event = get_object_or_404(Event, pk=itemid)
|
event = get_object_or_404(Event, pk=itemid)
|
||||||
if not event.approved:
|
if not event.approved:
|
||||||
raise Http404
|
raise Http404
|
||||||
return render_to_response('events/item.html', {
|
return render_pgweb(request, 'about', 'events/item.html', {
|
||||||
'obj': event,
|
'obj': event,
|
||||||
}, NavContext(request, 'about'))
|
})
|
||||||
|
|
||||||
@login_required
|
@login_required
|
||||||
def form(request, itemid):
|
def form(request, itemid):
|
||||||
|
@ -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 pgweb.core.models import Version
|
||||||
from models import Feature
|
from models import Feature
|
||||||
@ -24,13 +24,13 @@ def root(request):
|
|||||||
groups.append(currentgroup)
|
groups.append(currentgroup)
|
||||||
|
|
||||||
eol_versions = [v.tree for v in Version.objects.filter(supported=False, testing=False)]
|
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,
|
'groups': groups,
|
||||||
'eol_versions': eol_versions,
|
'eol_versions': eol_versions,
|
||||||
}, NavContext(request, 'about'))
|
})
|
||||||
|
|
||||||
def detail(request, featureid):
|
def detail(request, featureid):
|
||||||
feature = get_object_or_404(Feature, pk=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,
|
'feature': feature,
|
||||||
}, NavContext(request, 'about'))
|
})
|
||||||
|
@ -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.http import HttpResponse, HttpResponseForbidden
|
||||||
from django.views.decorators.csrf import csrf_exempt
|
from django.views.decorators.csrf import csrf_exempt
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
|
@ -1,4 +1,3 @@
|
|||||||
from django.shortcuts import render_to_response
|
|
||||||
from pgweb.util.decorators import login_required
|
from pgweb.util.decorators import login_required
|
||||||
from django.http import HttpResponse
|
from django.http import HttpResponse
|
||||||
from django.db import connection
|
from django.db import connection
|
||||||
@ -6,7 +5,7 @@ from django.conf import settings
|
|||||||
|
|
||||||
import os
|
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.helpers import template_to_string
|
||||||
from pgweb.util.misc import send_template_mail
|
from pgweb.util.misc import send_template_mail
|
||||||
|
|
||||||
@ -38,9 +37,9 @@ def submitbug(request):
|
|||||||
sendername="PG Bug reporting form",
|
sendername="PG Bug reporting form",
|
||||||
)
|
)
|
||||||
|
|
||||||
return render_to_response('misc/bug_completed.html', {
|
return render_pgweb(request, 'support', 'misc/bug_completed.html', {
|
||||||
'bugid': bugid,
|
'bugid': bugid,
|
||||||
}, NavContext(request, 'support'))
|
})
|
||||||
else:
|
else:
|
||||||
form = SubmitBugForm(initial={
|
form = SubmitBugForm(initial={
|
||||||
'name': '%s %s' % (request.user.first_name, request.user.last_name),
|
'name': '%s %s' % (request.user.first_name, request.user.last_name),
|
||||||
@ -49,14 +48,14 @@ def submitbug(request):
|
|||||||
|
|
||||||
versions = Version.objects.filter(supported=True)
|
versions = Version.objects.filter(supported=True)
|
||||||
|
|
||||||
return render_to_response('base/form.html', {
|
return render_pgweb(request, 'support', 'base/form.html', {
|
||||||
'form': form,
|
'form': form,
|
||||||
'formitemtype': 'bug report',
|
'formitemtype': 'bug report',
|
||||||
'operation': 'Submit',
|
'operation': 'Submit',
|
||||||
'form_intro': template_to_string('misc/bug_header.html', {
|
'form_intro': template_to_string('misc/bug_header.html', {
|
||||||
'supportedversions': versions,
|
'supportedversions': versions,
|
||||||
}),
|
}),
|
||||||
}, NavContext(request, 'support'))
|
})
|
||||||
|
|
||||||
|
|
||||||
# A crash testing URL. If the file /tmp/crashtest exists, raise a http 500
|
# A crash testing URL. If the file /tmp/crashtest exists, raise a http 500
|
||||||
|
@ -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 django.http import HttpResponse, Http404
|
||||||
from pgweb.util.decorators import login_required
|
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 pgweb.util.helpers import simple_form
|
||||||
|
|
||||||
from models import NewsArticle, NewsTag
|
from models import NewsArticle, NewsTag
|
||||||
@ -17,20 +17,20 @@ def archive(request, tag=None, paging=None):
|
|||||||
else:
|
else:
|
||||||
tag = None
|
tag = None
|
||||||
news = NewsArticle.objects.filter(approved=True)
|
news = NewsArticle.objects.filter(approved=True)
|
||||||
return render_to_response('news/newsarchive.html', {
|
return render_pgweb(request, 'about', 'news/newsarchive.html', {
|
||||||
'news': news,
|
'news': news,
|
||||||
'tag': tag,
|
'tag': tag,
|
||||||
'newstags': NewsTag.objects.all(),
|
'newstags': NewsTag.objects.all(),
|
||||||
}, NavContext(request, 'about'))
|
})
|
||||||
|
|
||||||
def item(request, itemid, throwaway=None):
|
def item(request, itemid, throwaway=None):
|
||||||
news = get_object_or_404(NewsArticle, pk=itemid)
|
news = get_object_or_404(NewsArticle, pk=itemid)
|
||||||
if not news.approved:
|
if not news.approved:
|
||||||
raise Http404
|
raise Http404
|
||||||
return render_to_response('news/item.html', {
|
return render_pgweb(request, 'about', 'news/item.html', {
|
||||||
'obj': news,
|
'obj': news,
|
||||||
'newstags': NewsTag.objects.all(),
|
'newstags': NewsTag.objects.all(),
|
||||||
}, NavContext(request, 'about'))
|
})
|
||||||
|
|
||||||
def taglist_json(request):
|
def taglist_json(request):
|
||||||
return HttpResponse(json.dumps({
|
return HttpResponse(json.dumps({
|
||||||
|
@ -1,8 +1,7 @@
|
|||||||
from django.shortcuts import render_to_response
|
|
||||||
from django.http import Http404
|
from django.http import Http404
|
||||||
from pgweb.util.decorators import login_required
|
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 pgweb.util.helpers import simple_form
|
||||||
|
|
||||||
from models import ProfessionalService
|
from models import ProfessionalService
|
||||||
@ -21,12 +20,12 @@ def root(request, servtype):
|
|||||||
title = servtype=='support' and 'Professional Services' or 'Hosting Providers'
|
title = servtype=='support' and 'Professional Services' or 'Hosting Providers'
|
||||||
what = servtype=='support' and 'support' or 'hosting'
|
what = servtype=='support' and 'support' or 'hosting'
|
||||||
support = servtype=='support'
|
support = servtype=='support'
|
||||||
return render_to_response('profserv/root.html', {
|
return render_pgweb(request, 'support', 'profserv/root.html', {
|
||||||
'title': title,
|
'title': title,
|
||||||
'support': support,
|
'support': support,
|
||||||
'regions': regions,
|
'regions': regions,
|
||||||
'what': what,
|
'what': what,
|
||||||
}, NavContext(request, 'support'))
|
})
|
||||||
|
|
||||||
|
|
||||||
def region(request, servtype, regionname):
|
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.
|
# 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),])
|
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,
|
'title': title,
|
||||||
'support': support,
|
'support': support,
|
||||||
'what': what,
|
'what': what,
|
||||||
'whatname': whatname,
|
'whatname': whatname,
|
||||||
'regionname': regname,
|
'regionname': regname,
|
||||||
'services': services,
|
'services': services,
|
||||||
}, NavContext(request, 'support'))
|
})
|
||||||
|
|
||||||
|
|
||||||
# Forms to edit
|
# Forms to edit
|
||||||
|
@ -1,6 +1,4 @@
|
|||||||
from django.shortcuts import render_to_response
|
from pgweb.util.contexts import render_pgweb
|
||||||
|
|
||||||
from pgweb.util.contexts import NavContext
|
|
||||||
|
|
||||||
from models import PUG
|
from models import PUG
|
||||||
|
|
||||||
@ -17,6 +15,6 @@ def index(request):
|
|||||||
'country': pug.country.name,
|
'country': pug.country.name,
|
||||||
'pugs': [pug]
|
'pugs': [pug]
|
||||||
})
|
})
|
||||||
return render_to_response('pugs/index.html', {
|
return render_pgweb(request, 'community', 'pugs/index.html', {
|
||||||
'pug_list': pug_list,
|
'pug_list': pug_list,
|
||||||
}, NavContext(request, 'community'))
|
})
|
||||||
|
@ -1,11 +1,9 @@
|
|||||||
from django.shortcuts import render_to_response
|
from pgweb.util.contexts import render_pgweb
|
||||||
|
|
||||||
from pgweb.util.contexts import NavContext
|
|
||||||
|
|
||||||
from models import Quote
|
from models import Quote
|
||||||
|
|
||||||
def allquotes(request):
|
def allquotes(request):
|
||||||
quotes = Quote.objects.filter(approved=True)
|
quotes = Quote.objects.filter(approved=True)
|
||||||
return render_to_response('quotes/quotelist.html', {
|
return render_pgweb(request, 'about', 'quotes/quotelist.html', {
|
||||||
'quotes': quotes,
|
'quotes': quotes,
|
||||||
}, NavContext(request, 'about'))
|
})
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
from django.shortcuts import render_to_response
|
from django.shortcuts import render
|
||||||
from django.template.context import RequestContext
|
|
||||||
from django.http import HttpResponseRedirect
|
from django.http import HttpResponseRedirect
|
||||||
from django.views.decorators.csrf import csrf_exempt
|
from django.views.decorators.csrf import csrf_exempt
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
@ -130,25 +129,25 @@ def search(request):
|
|||||||
# Check that we actually have something to search for
|
# Check that we actually have something to search for
|
||||||
if not request.GET.has_key('q') or request.GET['q'] == '':
|
if not request.GET.has_key('q') or request.GET['q'] == '':
|
||||||
if searchlists:
|
if searchlists:
|
||||||
return render_to_response('search/listsearch.html', {
|
return render(request, 'search/listsearch.html', {
|
||||||
'search_error': "No search term specified.",
|
'search_error': "No search term specified.",
|
||||||
'sortoptions': sortoptions,
|
'sortoptions': sortoptions,
|
||||||
'lists': MailingList.objects.all().order_by("group__sortkey"),
|
'lists': MailingList.objects.all().order_by("group__sortkey"),
|
||||||
'listid': listid,
|
'listid': listid,
|
||||||
'dates': dateoptions,
|
'dates': dateoptions,
|
||||||
'dateval': dateval,
|
'dateval': dateval,
|
||||||
}, RequestContext(request))
|
})
|
||||||
else:
|
else:
|
||||||
return render_to_response('search/sitesearch.html', {
|
return render(request, 'search/sitesearch.html', {
|
||||||
'search_error': "No search term specified.",
|
'search_error': "No search term specified.",
|
||||||
}, RequestContext(request))
|
})
|
||||||
query = request.GET['q'].strip()
|
query = request.GET['q'].strip()
|
||||||
|
|
||||||
# Anti-stefan prevention
|
# Anti-stefan prevention
|
||||||
if len(query) > 1000:
|
if len(query) > 1000:
|
||||||
return render_to_response('search/sitesearch.html', {
|
return render(request, 'search/sitesearch.html', {
|
||||||
'search_error': "Search term too long.",
|
'search_error': "Search term too long.",
|
||||||
}, RequestContext(request))
|
})
|
||||||
|
|
||||||
# Is the request being paged?
|
# Is the request being paged?
|
||||||
if request.GET.has_key('p'):
|
if request.GET.has_key('p'):
|
||||||
@ -199,14 +198,14 @@ def search(request):
|
|||||||
try:
|
try:
|
||||||
r = c.getresponse()
|
r = c.getresponse()
|
||||||
except (socket.timeout, ssl.SSLError):
|
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.',
|
'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:
|
if r.status != 200:
|
||||||
memc = None
|
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,
|
'search_error': 'Error talking to search server: %s' % r.reason,
|
||||||
}, RequestContext(request))
|
})
|
||||||
hits = json.loads(r.read())
|
hits = json.loads(r.read())
|
||||||
if has_memcached and memc:
|
if has_memcached and memc:
|
||||||
# Store them in memcached too! But only for 10 minutes...
|
# Store them in memcached too! But only for 10 minutes...
|
||||||
@ -229,7 +228,7 @@ def search(request):
|
|||||||
listsort
|
listsort
|
||||||
)
|
)
|
||||||
|
|
||||||
return render_to_response('search/listsearch.html', {
|
return render(request, 'search/listsearch.html', {
|
||||||
'hitcount': totalhits,
|
'hitcount': totalhits,
|
||||||
'firsthit': firsthit,
|
'firsthit': firsthit,
|
||||||
'lasthit': min(totalhits, firsthit+hitsperpage-1),
|
'lasthit': min(totalhits, firsthit+hitsperpage-1),
|
||||||
@ -251,7 +250,7 @@ def search(request):
|
|||||||
'listid': listid,
|
'listid': listid,
|
||||||
'dates': dateoptions,
|
'dates': dateoptions,
|
||||||
'dateval': dateval,
|
'dateval': dateval,
|
||||||
}, RequestContext(request))
|
})
|
||||||
|
|
||||||
else:
|
else:
|
||||||
# Website search is still done by making a regular pgsql connection
|
# Website search is still done by making a regular pgsql connection
|
||||||
@ -260,9 +259,9 @@ def search(request):
|
|||||||
conn = psycopg2.connect(settings.SEARCH_DSN)
|
conn = psycopg2.connect(settings.SEARCH_DSN)
|
||||||
curs = conn.cursor()
|
curs = conn.cursor()
|
||||||
except:
|
except:
|
||||||
return render_to_response('search/sitesearch.html', {
|
return render(request, 'search/sitesearch.html', {
|
||||||
'search_error': 'Could not connect to search database.'
|
'search_error': 'Could not connect to search database.'
|
||||||
}, RequestContext(request))
|
})
|
||||||
|
|
||||||
# This is kind of a hack, but... Some URLs are flagged as internal
|
# This is kind of a hack, but... Some URLs are flagged as internal
|
||||||
# and should as such only be included in searches that explicitly
|
# and should as such only be included in searches that explicitly
|
||||||
@ -283,9 +282,9 @@ def search(request):
|
|||||||
'internal': include_internal,
|
'internal': include_internal,
|
||||||
})
|
})
|
||||||
except psycopg2.ProgrammingError:
|
except psycopg2.ProgrammingError:
|
||||||
return render_to_response('search/sitesearch.html', {
|
return render(request, 'search/sitesearch.html', {
|
||||||
'search_error': 'Error executing search query.'
|
'search_error': 'Error executing search query.'
|
||||||
}, RequestContext(request))
|
})
|
||||||
|
|
||||||
hits = curs.fetchall()
|
hits = curs.fetchall()
|
||||||
conn.close()
|
conn.close()
|
||||||
@ -296,7 +295,7 @@ def search(request):
|
|||||||
suburl and urllib.quote_plus(suburl) or '',
|
suburl and urllib.quote_plus(suburl) or '',
|
||||||
)
|
)
|
||||||
|
|
||||||
return render_to_response('search/sitesearch.html', {
|
return render(request, 'search/sitesearch.html', {
|
||||||
'suburl': suburl,
|
'suburl': suburl,
|
||||||
'allsites': allsites,
|
'allsites': allsites,
|
||||||
'hitcount': totalhits,
|
'hitcount': totalhits,
|
||||||
@ -312,4 +311,4 @@ def search(request):
|
|||||||
'url': "%s%s" % (h[1], h[2]),
|
'url': "%s%s" % (h[1], h[2]),
|
||||||
'abstract': h[4].replace("[[[[[[", "<b>").replace("]]]]]]","</b>"),
|
'abstract': h[4].replace("[[[[[[", "<b>").replace("]]]]]]","</b>"),
|
||||||
'rank': h[5]} for h in hits[:-1]],
|
'rank': h[5]} for h in hits[:-1]],
|
||||||
}, RequestContext(request))
|
})
|
||||||
|
@ -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 pgweb.core.models import Version
|
||||||
from models import SecurityPatch
|
from models import SecurityPatch
|
||||||
@ -11,13 +11,13 @@ def GetPatchesList(filt):
|
|||||||
def _list_patches(request, filt):
|
def _list_patches(request, filt):
|
||||||
patches = GetPatchesList(filt)
|
patches = GetPatchesList(filt)
|
||||||
|
|
||||||
return render_to_response('security/security.html', {
|
return render_pgweb(request, 'support', 'security/security.html', {
|
||||||
'patches': patches,
|
'patches': patches,
|
||||||
'supported': Version.objects.filter(supported=True),
|
'supported': Version.objects.filter(supported=True),
|
||||||
'unsupported': Version.objects.filter(supported=False, tree__gt=0).extra(
|
'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)"],
|
where=["EXISTS (SELECT 1 FROM security_securitypatchversion pv WHERE pv.version_id=core_version.id)"],
|
||||||
),
|
),
|
||||||
}, NavContext(request, 'support'))
|
})
|
||||||
|
|
||||||
def index(request):
|
def index(request):
|
||||||
# Show all supported versions
|
# Show all supported versions
|
||||||
|
@ -1,6 +1,4 @@
|
|||||||
from django.shortcuts import render_to_response
|
from pgweb.util.contexts import render_pgweb
|
||||||
|
|
||||||
from pgweb.util.contexts import NavContext
|
|
||||||
from pgweb.util.decorators import cache
|
from pgweb.util.decorators import cache
|
||||||
|
|
||||||
from models import Sponsor, Server
|
from models import Sponsor, Server
|
||||||
@ -8,12 +6,12 @@ from models import Sponsor, Server
|
|||||||
@cache(minutes=30)
|
@cache(minutes=30)
|
||||||
def sponsors(request):
|
def sponsors(request):
|
||||||
sponsors = Sponsor.objects.select_related().filter(sponsortype__sortkey__gt=0).order_by('sponsortype__sortkey' ,'?')
|
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,
|
'sponsors': sponsors,
|
||||||
}, NavContext(request, 'about'))
|
})
|
||||||
|
|
||||||
def servers(request):
|
def servers(request):
|
||||||
servers = Server.objects.select_related().all()
|
servers = Server.objects.select_related().all()
|
||||||
return render_to_response('sponsors/servers.html', {
|
return render_pgweb(request, 'about', 'sponsors/servers.html', {
|
||||||
'servers': servers,
|
'servers': servers,
|
||||||
}, NavContext(request, 'about'))
|
})
|
||||||
|
@ -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.http import HttpResponseRedirect
|
||||||
from django.db import connection, transaction
|
from django.db import connection, transaction
|
||||||
from django.template.defaultfilters import slugify
|
from django.template.defaultfilters import slugify
|
||||||
from django.views.decorators.csrf import csrf_exempt
|
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.misc import get_client_ip, varnish_purge
|
||||||
from pgweb.util.helpers import HttpServerError
|
from pgweb.util.helpers import HttpServerError
|
||||||
|
|
||||||
@ -14,10 +14,10 @@ def results(request, surveyid, junk=None):
|
|||||||
survey = get_object_or_404(Survey, pk=surveyid)
|
survey = get_object_or_404(Survey, pk=surveyid)
|
||||||
surveylist = Survey.objects.all().order_by('-posted')
|
surveylist = Survey.objects.all().order_by('-posted')
|
||||||
|
|
||||||
return render_to_response('survey/results.html', {
|
return render_pgweb(request, 'community', 'survey/results.html', {
|
||||||
'survey': survey,
|
'survey': survey,
|
||||||
'surveylist': surveylist,
|
'surveylist': surveylist,
|
||||||
}, NavContext(request, 'community'))
|
})
|
||||||
|
|
||||||
# Served over insecure HTTP, the Varnish proxy strips cookies
|
# Served over insecure HTTP, the Varnish proxy strips cookies
|
||||||
@csrf_exempt
|
@csrf_exempt
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
from django.template import RequestContext
|
|
||||||
from django.utils.functional import SimpleLazyObject
|
from django.utils.functional import SimpleLazyObject
|
||||||
|
from django.shortcuts import render
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
|
|
||||||
# This is the whole site navigation structure. Stick in a smarter file?
|
# This is the whole site navigation structure. Stick in a smarter file?
|
||||||
@ -91,15 +91,15 @@ sitenav = {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
class NavContext(RequestContext):
|
def get_nav_menu(section):
|
||||||
def __init__(self, request, section):
|
if sitenav.has_key(section):
|
||||||
RequestContext.__init__(self, request)
|
return sitenav[section]
|
||||||
if sitenav.has_key(section):
|
else:
|
||||||
navsection = sitenav[section]
|
return {}
|
||||||
else:
|
|
||||||
navsection = {}
|
|
||||||
self.update({'navmenu': navsection})
|
|
||||||
|
|
||||||
|
def render_pgweb(request, section, template, context):
|
||||||
|
context['navmenu'] = get_nav_menu(section)
|
||||||
|
return render(request, template, context)
|
||||||
|
|
||||||
def _get_gitrev():
|
def _get_gitrev():
|
||||||
# Return the current git revision, that is used for
|
# Return the current git revision, that is used for
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
from django.shortcuts import render_to_response, get_object_or_404
|
from django.shortcuts import render, get_object_or_404
|
||||||
from pgweb.util.contexts import NavContext
|
from pgweb.util.contexts import render_pgweb
|
||||||
from django.http import HttpResponseRedirect, Http404
|
from django.http import HttpResponseRedirect, Http404
|
||||||
from django.template import Context
|
from django.template import Context
|
||||||
from django.template.loader import get_template
|
from django.template.loader import get_template
|
||||||
@ -63,7 +63,7 @@ def simple_form(instancetype, itemid, request, formclass, formtemplate='base/for
|
|||||||
else:
|
else:
|
||||||
described_checkboxes = None
|
described_checkboxes = None
|
||||||
|
|
||||||
return render_to_response(formtemplate, {
|
return render_pgweb(request, navsection, formtemplate, {
|
||||||
'form': form,
|
'form': form,
|
||||||
'formitemtype': instance._meta.verbose_name,
|
'formitemtype': instance._meta.verbose_name,
|
||||||
'markdownfields': markdownfields,
|
'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,
|
'jquery': hasattr(form, 'jquery') and form.jquery or None,
|
||||||
'savebutton': (itemid == "new") and "New" or "Save",
|
'savebutton': (itemid == "new") and "New" or "Save",
|
||||||
'operation': (itemid == "new") and "New" or "Edit",
|
'operation': (itemid == "new") and "New" or "Edit",
|
||||||
}, NavContext(request, navsection))
|
})
|
||||||
|
|
||||||
def template_to_string(templatename, attrs = {}):
|
def template_to_string(templatename, attrs = {}):
|
||||||
return get_template(templatename).render(Context(attrs))
|
return get_template(templatename).render(Context(attrs))
|
||||||
|
|
||||||
def HttpServerError(msg):
|
def HttpServerError(msg):
|
||||||
r = render_to_response('errors/500.html', {
|
r = render(request, 'errors/500.html', {
|
||||||
'message': msg,
|
'message': msg,
|
||||||
})
|
})
|
||||||
r.status_code = 500
|
r.status_code = 500
|
||||||
|
Reference in New Issue
Block a user