From 1ba88cf7d087c2783306854ea3fbc16c5fe17df4 Mon Sep 17 00:00:00 2001 From: Karl Hobley Date: Wed, 1 Apr 2015 10:52:14 +0100 Subject: [PATCH 01/18] Check Django version instead of hasattr --- wagtail/utils/compat.py | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/wagtail/utils/compat.py b/wagtail/utils/compat.py index 78c9c9744..c8acdfb65 100644 --- a/wagtail/utils/compat.py +++ b/wagtail/utils/compat.py @@ -1,5 +1,11 @@ +import django + + def get_related_model(rel): # In Django 1.7 and under, the related model is accessed by doing: rel.model # This was renamed in Django 1.8 to rel.related_model. rel.model now returns # the base model. - return getattr(rel, 'related_model', rel.model) + if django.VERSION >= (1, 8): + return rel.related_model + else: + return rel.model From bd292add612e925488c8c38976d0abd9d81da25a Mon Sep 17 00:00:00 2001 From: Karl Hobley Date: Thu, 2 Apr 2015 13:08:48 +0100 Subject: [PATCH 02/18] Removed patterns() in wagtailforms --- wagtail/wagtailforms/urls.py | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/wagtail/wagtailforms/urls.py b/wagtail/wagtailforms/urls.py index e3f6bf6a8..4cf64ccbe 100644 --- a/wagtail/wagtailforms/urls.py +++ b/wagtail/wagtailforms/urls.py @@ -1,9 +1,9 @@ -from django.conf.urls import patterns, url +from django.conf.urls import url + +from wagtail.wagtailforms import views -urlpatterns = patterns( - 'wagtail.wagtailforms.views', - url(r'^$', 'index', name='wagtailforms_index'), - url(r'^submissions/(\d+)/$', 'list_submissions', name='wagtailforms_list_submissions'), - -) +urlpatterns = [ + url(r'^$', views.index, name='wagtailforms_index'), + url(r'^submissions/(\d+)/$', views.list_submissions, name='wagtailforms_list_submissions'), +] From 53659b35b9c730db84e1db1e232f8ff7ef417ec7 Mon Sep 17 00:00:00 2001 From: Karl Hobley Date: Thu, 2 Apr 2015 13:09:02 +0100 Subject: [PATCH 03/18] Removed patterns() from docs --- docs/contrib/sitemaps.rst | 4 ++-- docs/howto/settings.rst | 4 ++-- docs/images/using_images_outside_wagtail.rst | 6 ++---- 3 files changed, 6 insertions(+), 8 deletions(-) diff --git a/docs/contrib/sitemaps.rst b/docs/contrib/sitemaps.rst index 203a423fb..8f4e0685a 100644 --- a/docs/contrib/sitemaps.rst +++ b/docs/contrib/sitemaps.rst @@ -26,11 +26,11 @@ Then, in urls.py, you need to add a link to the ``wagtail.contrib.wagtailsitemap from wagtail.contrib.wagtailsitemaps.views import sitemap - urlpatterns = patterns('', + urlpatterns = [ ... url('^sitemap\.xml$', sitemap), - ) + ] You should now be able to browse to "/sitemap.xml" and see the sitemap working. By default, all published pages in your website will be added to the site map. diff --git a/docs/howto/settings.rst b/docs/howto/settings.rst index 54a2c4b04..7a59d5de9 100644 --- a/docs/howto/settings.rst +++ b/docs/howto/settings.rst @@ -262,7 +262,7 @@ URL Patterns from wagtail.wagtaildocs import urls as wagtaildocs_urls from wagtail.wagtailsearch import urls as wagtailsearch_urls - urlpatterns = patterns('', + urlpatterns = [ url(r'^django-admin/', include(admin.site.urls)), url(r'^admin/', include(wagtailadmin_urls)), @@ -275,7 +275,7 @@ URL Patterns # For anything not caught by a more specific rule above, hand over to # Wagtail's serving mechanism url(r'', include(wagtail_urls)), - ) + ] This block of code for your project's ``urls.py`` does a few things: diff --git a/docs/images/using_images_outside_wagtail.rst b/docs/images/using_images_outside_wagtail.rst index 565f797da..12b82a8d9 100644 --- a/docs/images/using_images_outside_wagtail.rst +++ b/docs/images/using_images_outside_wagtail.rst @@ -17,13 +17,11 @@ Add an entry in your URLs configuration for ``wagtail.wagtailimages.urls``: from wagtail.wagtailimages import urls as wagtailimages_urls - urlpatterns = patterns('', + urlpatterns = [ ... url(r'^images/', include(wagtailimages_urls)), - - ... - ) + ] Generating URLs for images From 4ed3646d7408d1c92a31a6052c241707d9b2f571 Mon Sep 17 00:00:00 2001 From: Karl Hobley Date: Thu, 2 Apr 2015 13:09:14 +0100 Subject: [PATCH 04/18] Removed patterns() from tests --- wagtail/tests/non_root_urls.py | 6 +++--- wagtail/tests/urls.py | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/wagtail/tests/non_root_urls.py b/wagtail/tests/non_root_urls.py index badea652a..d25904f39 100644 --- a/wagtail/tests/non_root_urls.py +++ b/wagtail/tests/non_root_urls.py @@ -1,7 +1,7 @@ """An alternative urlconf module where Wagtail front-end URLs are rooted at '/site/' rather than '/'""" -from django.conf.urls import patterns, include, url +from django.conf.urls import include, url from wagtail.wagtailcore import urls as wagtail_urls from wagtail.wagtailadmin import urls as wagtailadmin_urls @@ -10,10 +10,10 @@ from wagtail.wagtailimages import urls as wagtailimages_urls from wagtail.wagtailsearch import urls as wagtailsearch_urls -urlpatterns = patterns('', +urlpatterns = [ url(r'^admin/', include(wagtailadmin_urls)), url(r'^search/', include(wagtailsearch_urls)), url(r'^documents/', include(wagtaildocs_urls)), url(r'^images/', include(wagtailimages_urls)), url(r'^site/', include(wagtail_urls)), -) +] diff --git a/wagtail/tests/urls.py b/wagtail/tests/urls.py index 57f62c7f2..53ef781a5 100644 --- a/wagtail/tests/urls.py +++ b/wagtail/tests/urls.py @@ -1,4 +1,4 @@ -from django.conf.urls import patterns, include, url +from django.conf.urls import include, url from wagtail.wagtailcore import urls as wagtail_urls from wagtail.wagtailadmin import urls as wagtailadmin_urls @@ -9,7 +9,7 @@ from wagtail.contrib.wagtailsitemaps.views import sitemap from wagtail.contrib.wagtailapi import urls as wagtailapi_urls -urlpatterns = patterns('', +urlpatterns = [ url(r'^admin/', include(wagtailadmin_urls)), url(r'^search/', include(wagtailsearch_urls)), url(r'^documents/', include(wagtaildocs_urls)), @@ -21,4 +21,4 @@ urlpatterns = patterns('', # For anything not caught by a more specific rule above, hand over to # Wagtail's serving mechanism url(r'', include(wagtail_urls)), -) +] From 97d2c06a7e747481feea0358f3c9e54a9453c271 Mon Sep 17 00:00:00 2001 From: Karl Hobley Date: Thu, 2 Apr 2015 13:09:34 +0100 Subject: [PATCH 05/18] Removed patterns() from project template --- wagtail/project_template/project_name/urls.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/wagtail/project_template/project_name/urls.py b/wagtail/project_template/project_name/urls.py index acd2c9256..427d674d4 100644 --- a/wagtail/project_template/project_name/urls.py +++ b/wagtail/project_template/project_name/urls.py @@ -1,6 +1,6 @@ import os -from django.conf.urls import patterns, include, url +from django.conf.urls import include, url from django.conf.urls.static import static from django.conf import settings from django.contrib import admin @@ -11,7 +11,7 @@ from wagtail.wagtaildocs import urls as wagtaildocs_urls from wagtail.wagtailcore import urls as wagtail_urls -urlpatterns = patterns('', +urlpatterns = [ url(r'^django-admin/', include(admin.site.urls)), url(r'^admin/', include(wagtailadmin_urls)), @@ -19,7 +19,7 @@ urlpatterns = patterns('', url(r'^documents/', include(wagtaildocs_urls)), url(r'', include(wagtail_urls)), -) +] if settings.DEBUG: From ad97bd5b140ba630e01ef2a24732742488657448 Mon Sep 17 00:00:00 2001 From: Karl Hobley Date: Thu, 2 Apr 2015 13:24:30 +0100 Subject: [PATCH 06/18] Make password reset url configs use callables --- wagtail/wagtailadmin/urls.py | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/wagtail/wagtailadmin/urls.py b/wagtail/wagtailadmin/urls.py index d6e5c01d1..805e237e2 100644 --- a/wagtail/wagtailadmin/urls.py +++ b/wagtail/wagtailadmin/urls.py @@ -1,5 +1,6 @@ from django.conf.urls import url from django.contrib.auth.decorators import permission_required +from django.contrib.auth import views as django_auth_views from django.views.decorators.cache import cache_control from wagtail.wagtailadmin.forms import PasswordResetForm @@ -92,7 +93,7 @@ urlpatterns += [ # Password reset url( - r'^password_reset/$', 'django.contrib.auth.views.password_reset', { + r'^password_reset/$', django_auth_views.password_reset, { 'template_name': 'wagtailadmin/account/password_reset/form.html', 'email_template_name': 'wagtailadmin/account/password_reset/email.txt', 'subject_template_name': 'wagtailadmin/account/password_reset/email_subject.txt', @@ -101,19 +102,19 @@ urlpatterns += [ }, name='wagtailadmin_password_reset' ), url( - r'^password_reset/done/$', 'django.contrib.auth.views.password_reset_done', { + r'^password_reset/done/$', django_auth_views.password_reset_done, { 'template_name': 'wagtailadmin/account/password_reset/done.html' }, name='wagtailadmin_password_reset_done' ), url( r'^password_reset/confirm/(?P[0-9A-Za-z_\-]+)/(?P[0-9A-Za-z]{1,13}-[0-9A-Za-z]{1,20})/$', - 'django.contrib.auth.views.password_reset_confirm', { + django_auth_views.password_reset_confirm, { 'template_name': 'wagtailadmin/account/password_reset/confirm.html', 'post_reset_redirect': 'wagtailadmin_password_reset_complete', }, name='wagtailadmin_password_reset_confirm', ), url( - r'^password_reset/complete/$', 'django.contrib.auth.views.password_reset_complete', { + r'^password_reset/complete/$', django_auth_views.password_reset_complete, { 'template_name': 'wagtailadmin/account/password_reset/complete.html' }, name='wagtailadmin_password_reset_complete' ), From a679aa26d3887541c10fc37ddf14e300daf05336 Mon Sep 17 00:00:00 2001 From: Karl Hobley Date: Thu, 2 Apr 2015 13:31:23 +0100 Subject: [PATCH 07/18] Change search_garbage_collect into BaseCommand --- .../management/commands/search_garbage_collect.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/wagtail/wagtailsearch/management/commands/search_garbage_collect.py b/wagtail/wagtailsearch/management/commands/search_garbage_collect.py index 08d8d8c1b..aa3dec2e5 100644 --- a/wagtail/wagtailsearch/management/commands/search_garbage_collect.py +++ b/wagtail/wagtailsearch/management/commands/search_garbage_collect.py @@ -1,10 +1,10 @@ -from django.core.management.base import NoArgsCommand +from django.core.management.base import BaseCommand from wagtail.wagtailsearch import models -class Command(NoArgsCommand): - def handle_noargs(self, **options): +class Command(BaseCommand): + def handle(self, **options): # Clean daily hits self.stdout.write("Cleaning daily hits records... ") models.QueryDailyHits.garbage_collect() From 6dfa1aad016cc0ee4e9e76fbe72900d80599907a Mon Sep 17 00:00:00 2001 From: Karl Hobley Date: Thu, 2 Apr 2015 13:33:54 +0100 Subject: [PATCH 08/18] Fixed deprecation warning in admin migration --- .../0001_create_admin_access_permissions.py | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/wagtail/wagtailadmin/migrations/0001_create_admin_access_permissions.py b/wagtail/wagtailadmin/migrations/0001_create_admin_access_permissions.py index 0b32e6c10..0546d2706 100644 --- a/wagtail/wagtailadmin/migrations/0001_create_admin_access_permissions.py +++ b/wagtail/wagtailadmin/migrations/0001_create_admin_access_permissions.py @@ -1,6 +1,7 @@ # -*- coding: utf-8 -*- from __future__ import unicode_literals +import django from django.db import migrations @@ -11,11 +12,18 @@ def create_admin_access_permissions(apps, schema_editor): # Add a fake content type to hang the 'can access Wagtail admin' permission off. # The fact that this doesn't correspond to an actual defined model shouldn't matter, I hope... - wagtailadmin_content_type = ContentType.objects.create( - app_label='wagtailadmin', - model='admin', - name='Wagtail admin' - ) + if django.VERSION >= (1, 8): + wagtailadmin_content_type = ContentType.objects.create( + app_label='wagtailadmin', + model='admin' + ) + else: + # Django 1.7 and below require a content type name + wagtailadmin_content_type = ContentType.objects.create( + app_label='wagtailadmin', + model='admin', + name='Wagtail admin' + ) # Create admin permission admin_permission = Permission.objects.create( From 381bd10665c387b0d4e6a91621c49fbca3d8a5c8 Mon Sep 17 00:00:00 2001 From: Karl Hobley Date: Thu, 2 Apr 2015 15:33:53 +0100 Subject: [PATCH 09/18] Cleanup usages of get_field_by_name in search --- wagtail/wagtailsearch/backends/db.py | 4 ++-- wagtail/wagtailsearch/index.py | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/wagtail/wagtailsearch/backends/db.py b/wagtail/wagtailsearch/backends/db.py index 0ee019f38..732de6195 100644 --- a/wagtail/wagtailsearch/backends/db.py +++ b/wagtail/wagtailsearch/backends/db.py @@ -43,8 +43,8 @@ class DBSearchQuery(BaseSearchQuery): for field_name in fields: # Check if the field exists (this will filter out indexed callables) try: - model._meta.get_field_by_name(field_name) - except: + model._meta.get_field(field_name) + except models.fields.FieldDoesNotExist: continue # Filter on this field diff --git a/wagtail/wagtailsearch/index.py b/wagtail/wagtailsearch/index.py index 9d66cf9f8..b769c34e6 100644 --- a/wagtail/wagtailsearch/index.py +++ b/wagtail/wagtailsearch/index.py @@ -88,7 +88,7 @@ class BaseField(object): self.kwargs = kwargs def get_field(self, cls): - return cls._meta.get_field_by_name(self.field_name)[0] + return cls._meta.get_field(self.field_name) def get_attname(self, cls): try: From e12d301331d71534788118d9b45b55c567dff148 Mon Sep 17 00:00:00 2001 From: Karl Hobley Date: Thu, 2 Apr 2015 15:35:24 +0100 Subject: [PATCH 10/18] Cleanup usage of get_field_by_name in api --- wagtail/contrib/wagtailapi/endpoints.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/wagtail/contrib/wagtailapi/endpoints.py b/wagtail/contrib/wagtailapi/endpoints.py index edb1d4bbf..518dce06c 100644 --- a/wagtail/contrib/wagtailapi/endpoints.py +++ b/wagtail/contrib/wagtailapi/endpoints.py @@ -63,7 +63,7 @@ def get_api_data(obj, fields): # Check django fields try: - field = obj._meta.get_field_by_name(field_name)[0] + field = obj._meta.get_field(field_name) if field.rel and isinstance(field.rel, models.ManyToOneRel): # Foreign key From b9c3bc83822d5996e44496b9cf99d6db50fd162f Mon Sep 17 00:00:00 2001 From: Karl Hobley Date: Thu, 2 Apr 2015 15:46:57 +0100 Subject: [PATCH 11/18] Fix '==' --- wagtail/wagtailredirects/templates/wagtailredirects/list.html | 4 ++-- .../wagtailredirects/templates/wagtailredirects/results.html | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/wagtail/wagtailredirects/templates/wagtailredirects/list.html b/wagtail/wagtailredirects/templates/wagtailredirects/list.html index 602fde8b8..f7f320168 100644 --- a/wagtail/wagtailredirects/templates/wagtailredirects/list.html +++ b/wagtail/wagtailredirects/templates/wagtailredirects/list.html @@ -31,8 +31,8 @@ {{ redirect.link }} {% endif %} -
{{ redirect.get_is_permanent_display }}
+
{{ redirect.get_is_permanent_display }}
{% endfor %} - \ No newline at end of file + diff --git a/wagtail/wagtailredirects/templates/wagtailredirects/results.html b/wagtail/wagtailredirects/templates/wagtailredirects/results.html index 6dbde68d1..eb2b14b4a 100644 --- a/wagtail/wagtailredirects/templates/wagtailredirects/results.html +++ b/wagtail/wagtailredirects/templates/wagtailredirects/results.html @@ -16,7 +16,7 @@ {% else %} {% if query_string %}

{% blocktrans %}Sorry, no redirects match "{{ query_string }}"{% endblocktrans %} - {% else %} + {% else %} {% url 'wagtailredirects_add_redirect' as wagtailredirects_add_redirect_url %}

{% blocktrans %}No redirects have been created. Why not add one?{% endblocktrans %}

{% endif %} From 87cd93587e35c05276098b6bfada5210b63c03ce Mon Sep 17 00:00:00 2001 From: Karl Hobley Date: Thu, 2 Apr 2015 15:52:09 +0100 Subject: [PATCH 12/18] Use TEMPLATES setting in tests --- wagtail/tests/settings.py | 25 ++++++++++++++++++++++--- 1 file changed, 22 insertions(+), 3 deletions(-) diff --git a/wagtail/tests/settings.py b/wagtail/tests/settings.py index d28765a6d..a03b9d887 100644 --- a/wagtail/tests/settings.py +++ b/wagtail/tests/settings.py @@ -1,5 +1,6 @@ import os +import django from django.conf import global_settings @@ -34,9 +35,27 @@ STATICFILES_FINDERS = ( USE_TZ = True -TEMPLATE_CONTEXT_PROCESSORS = global_settings.TEMPLATE_CONTEXT_PROCESSORS + ( - 'django.core.context_processors.request', -) +if django.VERSION >= (1, 8): + TEMPLATES = [ + { + 'BACKEND': 'django.template.backends.django.DjangoTemplates', + 'DIRS': [], + 'APP_DIRS': True, + 'OPTIONS': { + 'context_processors': [ + 'django.template.context_processors.debug', + 'django.template.context_processors.request', + 'django.contrib.auth.context_processors.auth', + 'django.contrib.messages.context_processors.messages', + 'django.template.context_processors.request', + ], + }, + }, + ] +else: + TEMPLATE_CONTEXT_PROCESSORS = global_settings.TEMPLATE_CONTEXT_PROCESSORS + ( + 'django.core.context_processors.request', + ) MIDDLEWARE_CLASSES = ( 'django.middleware.common.CommonMiddleware', From 4ad856d0d854d4d0fab7841f2161e14b9026d6d7 Mon Sep 17 00:00:00 2001 From: Karl Hobley Date: Thu, 2 Apr 2015 15:52:26 +0100 Subject: [PATCH 13/18] Fixes to render_modal_workflow - RequestContext is deprecated - Fixed mutable dict as a default parameter --- wagtail/wagtailadmin/modal_workflow.py | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/wagtail/wagtailadmin/modal_workflow.py b/wagtail/wagtailadmin/modal_workflow.py index 998dfdec3..ac46d5d12 100644 --- a/wagtail/wagtailadmin/modal_workflow.py +++ b/wagtail/wagtailadmin/modal_workflow.py @@ -1,24 +1,22 @@ import json from django.http import HttpResponse -from django.template import RequestContext from django.template.loader import render_to_string -def render_modal_workflow(request, html_template, js_template, template_vars={}): +def render_modal_workflow(request, html_template, js_template, template_vars=None): """" Render a response consisting of an HTML chunk and a JS onload chunk in the format required by the modal-workflow framework. """ response_keyvars = [] - context = RequestContext(request) if html_template: - html = render_to_string(html_template, template_vars, context) + html = render_to_string(html_template, template_vars or {}, request=request) response_keyvars.append("'html': %s" % json.dumps(html)) if js_template: - js = render_to_string(js_template, template_vars, context) + js = render_to_string(js_template, template_vars or {}, request=request) response_keyvars.append("'onload': %s" % js) response_text = "{%s}" % ','.join(response_keyvars) From 30e04cfaa885e0ba9dc789eb177fe46073337274 Mon Sep 17 00:00:00 2001 From: Karl Hobley Date: Thu, 2 Apr 2015 16:06:59 +0100 Subject: [PATCH 14/18] Removed RequestContext from multiple image upload --- wagtail/wagtailimages/views/multiple.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/wagtail/wagtailimages/views/multiple.py b/wagtail/wagtailimages/views/multiple.py index 428a7f49e..f240794a9 100644 --- a/wagtail/wagtailimages/views/multiple.py +++ b/wagtail/wagtailimages/views/multiple.py @@ -6,7 +6,6 @@ from django.views.decorators.http import require_POST from django.core.exceptions import PermissionDenied from django.views.decorators.vary import vary_on_headers from django.http import HttpResponse, HttpResponseBadRequest -from django.template import RequestContext from django.template.loader import render_to_string from django.utils.encoding import force_text @@ -78,7 +77,7 @@ def add(request): 'form': render_to_string('wagtailimages/multiple/edit_form.html', { 'image': image, 'form': get_image_edit_form(Image)(instance=image, prefix='image-%d' % image.id), - }, context_instance=RequestContext(request)), + }, request=request), }) else: # Validation error @@ -131,7 +130,7 @@ def edit(request, image_id, callback=None): 'form': render_to_string('wagtailimages/multiple/edit_form.html', { 'image': image, 'form': form, - }, context_instance=RequestContext(request)), + }, request=request), }) From 84b3a0757a68dafea5e72c37b9a1120253f1bdea Mon Sep 17 00:00:00 2001 From: Karl Hobley Date: Thu, 2 Apr 2015 16:08:26 +0100 Subject: [PATCH 15/18] Removed RequestContext from site summary --- wagtail/wagtailadmin/site_summary.py | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/wagtail/wagtailadmin/site_summary.py b/wagtail/wagtailadmin/site_summary.py index 97e79408a..02ca48ea8 100644 --- a/wagtail/wagtailadmin/site_summary.py +++ b/wagtail/wagtailadmin/site_summary.py @@ -1,4 +1,3 @@ -from django.template import RequestContext from django.template.loader import render_to_string from wagtail.wagtailcore import hooks @@ -15,8 +14,7 @@ class SummaryItem(object): return {} def render(self): - return render_to_string(self.template, self.get_context(), - RequestContext(self.request)) + return render_to_string(self.template, self.get_context(), request=self.request) class PagesSummaryItem(SummaryItem): @@ -46,4 +44,4 @@ class SiteSummaryPanel(object): def render(self): return render_to_string('wagtailadmin/home/site_summary.html', { 'summary_items': sorted(self.summary_items, key=lambda p: p.order), - }, RequestContext(self.request)) + }, request=self.request) From 886c597b38bda9806fd20941d1b22a6034d8db95 Mon Sep 17 00:00:00 2001 From: Karl Hobley Date: Thu, 2 Apr 2015 16:16:22 +0100 Subject: [PATCH 16/18] Removed RequestContext from userbar --- wagtail/wagtailadmin/userbar.py | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/wagtail/wagtailadmin/userbar.py b/wagtail/wagtailadmin/userbar.py index e1ca0d6a5..1629b8079 100644 --- a/wagtail/wagtailadmin/userbar.py +++ b/wagtail/wagtailadmin/userbar.py @@ -1,11 +1,12 @@ -from django.template import RequestContext from django.template.loader import render_to_string + class BaseItem(object): template = 'wagtailadmin/userbar/item_base.html' def render(self, request): - return render_to_string(self.template, dict(self=self, request=request), context_instance=RequestContext(request)) + return render_to_string(self.template, dict(self=self, request=request), request=request) + class AddPageItem(BaseItem): template = 'wagtailadmin/userbar/item_page_add.html' @@ -30,6 +31,7 @@ class AddPageItem(BaseItem): return super(AddPageItem, self).render(request) + class EditPageItem(BaseItem): template = 'wagtailadmin/userbar/item_page_edit.html' @@ -52,8 +54,8 @@ class EditPageItem(BaseItem): return super(EditPageItem, self).render(request) -class ModeratePageItem(BaseItem): +class ModeratePageItem(BaseItem): def __init__(self, revision): self.revision = revision @@ -72,8 +74,10 @@ class ModeratePageItem(BaseItem): return super(ModeratePageItem, self).render(request) + class ApproveModerationEditPageItem(ModeratePageItem): template = 'wagtailadmin/userbar/item_page_approve.html' + class RejectModerationEditPageItem(ModeratePageItem): template = 'wagtailadmin/userbar/item_page_reject.html' From cbad8d8c6d3a99f9c80ddac311430ee85a386172 Mon Sep 17 00:00:00 2001 From: Karl Hobley Date: Thu, 2 Apr 2015 16:16:39 +0100 Subject: [PATCH 17/18] Removed RequestContext from home views --- wagtail/wagtailadmin/views/home.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/wagtail/wagtailadmin/views/home.py b/wagtail/wagtailadmin/views/home.py index 4d3bae444..4da1cc681 100644 --- a/wagtail/wagtailadmin/views/home.py +++ b/wagtail/wagtailadmin/views/home.py @@ -1,6 +1,5 @@ from django.shortcuts import render from django.conf import settings -from django.template import RequestContext from django.template.loader import render_to_string from wagtail.wagtailcore import hooks @@ -22,7 +21,7 @@ class PagesForModerationPanel(object): def render(self): return render_to_string('wagtailadmin/home/pages_for_moderation.html', { 'page_revisions_for_moderation': self.page_revisions_for_moderation, - }, RequestContext(self.request)) + }, request=self.request) class RecentEditsPanel(object): @@ -43,7 +42,7 @@ class RecentEditsPanel(object): def render(self): return render_to_string('wagtailadmin/home/recent_edits.html', { 'last_edits': self.last_edits, - }, RequestContext(self.request)) + }, request=self.request) def home(request): From ea2294dc98c8de67093923352602e7854fbd2ba5 Mon Sep 17 00:00:00 2001 From: Karl Hobley Date: Thu, 2 Apr 2015 16:48:29 +0100 Subject: [PATCH 18/18] Added backwards-compatible render_to_string --- wagtail/utils/compat.py | 20 ++++++++++++++++++++ wagtail/wagtailadmin/modal_workflow.py | 3 ++- wagtail/wagtailadmin/site_summary.py | 3 +-- wagtail/wagtailadmin/userbar.py | 2 +- wagtail/wagtailadmin/views/home.py | 2 +- wagtail/wagtailimages/views/multiple.py | 2 +- 6 files changed, 26 insertions(+), 6 deletions(-) diff --git a/wagtail/utils/compat.py b/wagtail/utils/compat.py index c8acdfb65..e3d47fddb 100644 --- a/wagtail/utils/compat.py +++ b/wagtail/utils/compat.py @@ -1,4 +1,5 @@ import django +from django.template import loader def get_related_model(rel): @@ -9,3 +10,22 @@ def get_related_model(rel): return rel.related_model else: return rel.model + + +def render_to_string(template_name, context=None, request=None, **kwargs): + if django.VERSION >= (1, 8): + return loader.render_to_string( + template_name, + context=context, + request=request, + **kwargs + ) + else: + # Backwards compatibility for Django 1.7 and below + from django.template.context import RequestContext + return loader.render_to_string( + template_name, + dictionary=context, + context_instance=RequestContext(request), + **kwargs + ) diff --git a/wagtail/wagtailadmin/modal_workflow.py b/wagtail/wagtailadmin/modal_workflow.py index ac46d5d12..94c8c2d0f 100644 --- a/wagtail/wagtailadmin/modal_workflow.py +++ b/wagtail/wagtailadmin/modal_workflow.py @@ -1,7 +1,8 @@ import json from django.http import HttpResponse -from django.template.loader import render_to_string + +from wagtail.utils.compat import render_to_string def render_modal_workflow(request, html_template, js_template, template_vars=None): diff --git a/wagtail/wagtailadmin/site_summary.py b/wagtail/wagtailadmin/site_summary.py index 02ca48ea8..0e137c498 100644 --- a/wagtail/wagtailadmin/site_summary.py +++ b/wagtail/wagtailadmin/site_summary.py @@ -1,7 +1,6 @@ -from django.template.loader import render_to_string - from wagtail.wagtailcore import hooks from wagtail.wagtailcore.models import Page +from wagtail.utils.compat import render_to_string class SummaryItem(object): diff --git a/wagtail/wagtailadmin/userbar.py b/wagtail/wagtailadmin/userbar.py index 1629b8079..0e2e4e03f 100644 --- a/wagtail/wagtailadmin/userbar.py +++ b/wagtail/wagtailadmin/userbar.py @@ -1,4 +1,4 @@ -from django.template.loader import render_to_string +from wagtail.utils.compat import render_to_string class BaseItem(object): diff --git a/wagtail/wagtailadmin/views/home.py b/wagtail/wagtailadmin/views/home.py index 4da1cc681..e1db6b0a8 100644 --- a/wagtail/wagtailadmin/views/home.py +++ b/wagtail/wagtailadmin/views/home.py @@ -1,9 +1,9 @@ from django.shortcuts import render from django.conf import settings -from django.template.loader import render_to_string from wagtail.wagtailcore import hooks from wagtail.wagtailcore.models import PageRevision, UserPagePermissionsProxy +from wagtail.utils.compat import render_to_string from wagtail.wagtailadmin.site_summary import SiteSummaryPanel diff --git a/wagtail/wagtailimages/views/multiple.py b/wagtail/wagtailimages/views/multiple.py index f240794a9..71888a3d2 100644 --- a/wagtail/wagtailimages/views/multiple.py +++ b/wagtail/wagtailimages/views/multiple.py @@ -6,7 +6,6 @@ from django.views.decorators.http import require_POST from django.core.exceptions import PermissionDenied from django.views.decorators.vary import vary_on_headers from django.http import HttpResponse, HttpResponseBadRequest -from django.template.loader import render_to_string from django.utils.encoding import force_text from wagtail.wagtailsearch.backends import get_search_backends @@ -20,6 +19,7 @@ from wagtail.wagtailimages.fields import ( ALLOWED_EXTENSIONS, FILE_TOO_LARGE_ERROR, ) +from wagtail.utils.compat import render_to_string def json_response(document):