diff --git a/README.rst b/README.rst
index 62d42aa83..9a1961b32 100644
--- a/README.rst
+++ b/README.rst
@@ -26,6 +26,8 @@ Wagtail is a Django content management system built originally for the `Royal Co
* Fast out of the box. `Varnish `_-friendly if you need it
* Tests! But not enough; we're working hard to improve this
+It supports Django 1.6.2+ on Python 2.6 and 2.7. Django 1.7 and Python 3 support are in progress.
+
Find out more at `wagtail.io `_. Documentation is at `wagtail.readthedocs.org `_.
Got a question? Ask it on our `Google Group `_.
diff --git a/docs/index.rst b/docs/index.rst
index 96ff94c23..dbfe91f33 100644
--- a/docs/index.rst
+++ b/docs/index.rst
@@ -3,6 +3,8 @@ Welcome to Wagtail's documentation
Wagtail is a modern, flexible CMS, built on Django.
+It supports Django 1.6.2+ on Python 2.6 and 2.7. Django 1.7 and Python 3 support are in progress.
+
.. toctree::
:maxdepth: 3
diff --git a/wagtail/tests/urls.py b/wagtail/tests/urls.py
index d133a4bf8..d04c871a3 100644
--- a/wagtail/tests/urls.py
+++ b/wagtail/tests/urls.py
@@ -2,14 +2,8 @@ from django.conf.urls import patterns, include, url
from wagtail.wagtailcore import urls as wagtail_urls
from wagtail.wagtailadmin import urls as wagtailadmin_urls
-from wagtail.wagtailimages import urls as wagtailimages_urls
-from wagtail.wagtailembeds import urls as wagtailembeds_urls
-from wagtail.wagtaildocs import admin_urls as wagtaildocs_admin_urls
from wagtail.wagtaildocs import urls as wagtaildocs_urls
-from wagtail.wagtailsnippets import urls as wagtailsnippets_urls
-from wagtail.wagtailsearch.urls import frontend as wagtailsearch_frontend_urls, admin as wagtailsearch_admin_urls
-from wagtail.wagtailusers import urls as wagtailusers_urls
-from wagtail.wagtailredirects import urls as wagtailredirects_urls
+from wagtail.wagtailsearch.urls import frontend as wagtailsearch_frontend_urls
# Signal handlers
from wagtail.wagtailsearch import register_signal_handlers as wagtailsearch_register_signal_handlers
@@ -17,16 +11,8 @@ wagtailsearch_register_signal_handlers()
urlpatterns = patterns('',
- url(r'^admin/images/', include(wagtailimages_urls)),
- url(r'^admin/embeds/', include(wagtailembeds_urls)),
- url(r'^admin/documents/', include(wagtaildocs_admin_urls)),
- url(r'^admin/snippets/', include(wagtailsnippets_urls)),
- url(r'^admin/search/', include(wagtailsearch_admin_urls)),
- url(r'^admin/users/', include(wagtailusers_urls)),
- url(r'^admin/redirects/', include(wagtailredirects_urls)),
url(r'^admin/', include(wagtailadmin_urls)),
url(r'^search/', include(wagtailsearch_frontend_urls)),
-
url(r'^documents/', include(wagtaildocs_urls)),
# For anything not caught by a more specific rule above, hand over to
diff --git a/wagtail/wagtailadmin/urls.py b/wagtail/wagtailadmin/urls.py
index 3b1a98535..599da20e3 100644
--- a/wagtail/wagtailadmin/urls.py
+++ b/wagtail/wagtailadmin/urls.py
@@ -1,85 +1,99 @@
-from django.conf.urls import patterns, url
+from django.conf.urls import url
from django.conf import settings
from wagtail.wagtailadmin.forms import LoginForm, PasswordResetForm
+from wagtail.wagtailadmin.views import account, chooser, home, pages, tags, userbar
+from wagtail.wagtailadmin import hooks
-
-urlpatterns = patterns(
- 'django.contrib.auth.views',
+urlpatterns = [
url(
- r'^login/$', 'login', {
+ r'^login/$', 'django.contrib.auth.views.login', {
'template_name': 'wagtailadmin/login.html',
'authentication_form': LoginForm,
'extra_context': {'show_password_reset': getattr(settings, 'WAGTAIL_PASSWORD_MANAGEMENT_ENABLED', True)},
- } , name='wagtailadmin_login'
+ }, name='wagtailadmin_login'
),
# Password reset
url(
- r'^password_reset/$', 'password_reset', {
+ r'^password_reset/$', 'django.contrib.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',
'password_reset_form': PasswordResetForm,
}, name='password_reset'
),
- url(r'^password_reset/done/$', 'password_reset_done', {'template_name': 'wagtailadmin/account/password_reset/done.html'}, name='password_reset_done'),
+ url(
+ r'^password_reset/done/$', 'django.contrib.auth.views.password_reset_done', {
+ 'template_name': 'wagtailadmin/account/password_reset/done.html'
+ }, name='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})/$',
- 'password_reset_confirm',
+ 'django.contrib.auth.views.password_reset_confirm',
{'template_name': 'wagtailadmin/account/password_reset/confirm.html'},
name='password_reset_confirm',
),
- url(r'^password_reset/complete/$', 'password_reset_complete', {'template_name': 'wagtailadmin/account/password_reset/complete.html'}, name='password_reset_complete'),
-)
+ url(
+ r'^password_reset/complete/$', 'django.contrib.auth.views.password_reset_complete',
+ {'template_name': 'wagtailadmin/account/password_reset/complete.html'},
+ name='password_reset_complete'
+ ),
+]
-urlpatterns += patterns(
- 'wagtail.wagtailadmin.views',
- url(r'^$', 'home.home', name='wagtailadmin_home'),
+urlpatterns += [
+ url(r'^$', home.home, name='wagtailadmin_home'),
- url(r'^failwhale/$', 'home.error_test', name='wagtailadmin_error_test'),
+ url(r'^failwhale/$', home.error_test, name='wagtailadmin_error_test'),
- url(r'^pages/$', 'pages.index', name='wagtailadmin_explore_root'),
- url(r'^pages/(\d+)/$', 'pages.index', name='wagtailadmin_explore'),
+ url(r'^pages/$', pages.index, name='wagtailadmin_explore_root'),
+ url(r'^pages/(\d+)/$', pages.index, name='wagtailadmin_explore'),
- url(r'^pages/new/$', 'pages.select_type', name='wagtailadmin_pages_select_type'),
- url(r'^pages/new/(\w+)/(\w+)/$', 'pages.select_location', name='wagtailadmin_pages_select_location'),
- url(r'^pages/new/(\w+)/(\w+)/(\d+)/$', 'pages.create', name='wagtailadmin_pages_create'),
- url(r'^pages/new/(\w+)/(\w+)/(\d+)/preview/$', 'pages.preview_on_create', name='wagtailadmin_pages_preview_on_create'),
- url(r'^pages/usage/(\w+)/(\w+)/$', 'pages.content_type_use', name='wagtailadmin_pages_type_use'),
+ url(r'^pages/new/$', pages.select_type, name='wagtailadmin_pages_select_type'),
+ url(r'^pages/new/(\w+)/(\w+)/$', pages.select_location, name='wagtailadmin_pages_select_location'),
+ url(r'^pages/new/(\w+)/(\w+)/(\d+)/$', pages.create, name='wagtailadmin_pages_create'),
+ url(r'^pages/new/(\w+)/(\w+)/(\d+)/preview/$', pages.preview_on_create, name='wagtailadmin_pages_preview_on_create'),
+ url(r'^pages/usage/(\w+)/(\w+)/$', pages.content_type_use, name='wagtailadmin_pages_type_use'),
- url(r'^pages/(\d+)/edit/$', 'pages.edit', name='wagtailadmin_pages_edit'),
- url(r'^pages/(\d+)/edit/preview/$', 'pages.preview_on_edit', name='wagtailadmin_pages_preview_on_edit'),
+ url(r'^pages/(\d+)/edit/$', pages.edit, name='wagtailadmin_pages_edit'),
+ url(r'^pages/(\d+)/edit/preview/$', pages.preview_on_edit, name='wagtailadmin_pages_preview_on_edit'),
- url(r'^pages/preview_placeholder/$', 'pages.preview_placeholder', name='wagtailadmin_pages_preview_placeholder'),
+ url(r'^pages/preview_placeholder/$', pages.preview_placeholder, name='wagtailadmin_pages_preview_placeholder'),
- url(r'^pages/(\d+)/view_draft/$', 'pages.view_draft', name='wagtailadmin_pages_view_draft'),
- url(r'^pages/(\d+)/add_subpage/$', 'pages.add_subpage', name='wagtailadmin_pages_add_subpage'),
- url(r'^pages/(\d+)/delete/$', 'pages.delete', name='wagtailadmin_pages_delete'),
- url(r'^pages/(\d+)/unpublish/$', 'pages.unpublish', name='wagtailadmin_pages_unpublish'),
+ url(r'^pages/(\d+)/view_draft/$', pages.view_draft, name='wagtailadmin_pages_view_draft'),
+ url(r'^pages/(\d+)/add_subpage/$', pages.add_subpage, name='wagtailadmin_pages_add_subpage'),
+ url(r'^pages/(\d+)/delete/$', pages.delete, name='wagtailadmin_pages_delete'),
+ url(r'^pages/(\d+)/unpublish/$', pages.unpublish, name='wagtailadmin_pages_unpublish'),
- url(r'^pages/search/$', 'pages.search', name='wagtailadmin_pages_search'),
+ url(r'^pages/search/$', pages.search, name='wagtailadmin_pages_search'),
- url(r'^pages/(\d+)/move/$', 'pages.move_choose_destination', name='wagtailadmin_pages_move'),
- url(r'^pages/(\d+)/move/(\d+)/$', 'pages.move_choose_destination', name='wagtailadmin_pages_move_choose_destination'),
- url(r'^pages/(\d+)/move/(\d+)/confirm/$', 'pages.move_confirm', name='wagtailadmin_pages_move_confirm'),
- url(r'^pages/(\d+)/set_position/$', 'pages.set_page_position', name='wagtailadmin_pages_set_page_position'),
+ url(r'^pages/(\d+)/move/$', pages.move_choose_destination, name='wagtailadmin_pages_move'),
+ url(r'^pages/(\d+)/move/(\d+)/$', pages.move_choose_destination, name='wagtailadmin_pages_move_choose_destination'),
+ url(r'^pages/(\d+)/move/(\d+)/confirm/$', pages.move_confirm, name='wagtailadmin_pages_move_confirm'),
+ url(r'^pages/(\d+)/set_position/$', pages.set_page_position, name='wagtailadmin_pages_set_page_position'),
- url(r'^pages/moderation/(\d+)/approve/$', 'pages.approve_moderation', name='wagtailadmin_pages_approve_moderation'),
- url(r'^pages/moderation/(\d+)/reject/$', 'pages.reject_moderation', name='wagtailadmin_pages_reject_moderation'),
- url(r'^pages/moderation/(\d+)/preview/$', 'pages.preview_for_moderation', name='wagtailadmin_pages_preview_for_moderation'),
+ url(r'^pages/moderation/(\d+)/approve/$', pages.approve_moderation, name='wagtailadmin_pages_approve_moderation'),
+ url(r'^pages/moderation/(\d+)/reject/$', pages.reject_moderation, name='wagtailadmin_pages_reject_moderation'),
+ url(r'^pages/moderation/(\d+)/preview/$', pages.preview_for_moderation, name='wagtailadmin_pages_preview_for_moderation'),
- url(r'^choose-page/$', 'chooser.browse', name='wagtailadmin_choose_page'),
- url(r'^choose-page/(\d+)/$', 'chooser.browse', name='wagtailadmin_choose_page_child'),
- url(r'^choose-external-link/$', 'chooser.external_link', name='wagtailadmin_choose_page_external_link'),
- url(r'^choose-email-link/$', 'chooser.email_link', name='wagtailadmin_choose_page_email_link'),
+ url(r'^choose-page/$', chooser.browse, name='wagtailadmin_choose_page'),
+ url(r'^choose-page/(\d+)/$', chooser.browse, name='wagtailadmin_choose_page_child'),
+ url(r'^choose-external-link/$', chooser.external_link, name='wagtailadmin_choose_page_external_link'),
+ url(r'^choose-email-link/$', chooser.email_link, name='wagtailadmin_choose_page_email_link'),
- url(r'^tag-autocomplete/$', 'tags.autocomplete', name='wagtailadmin_tag_autocomplete'),
+ url(r'^tag-autocomplete/$', tags.autocomplete, name='wagtailadmin_tag_autocomplete'),
- url(r'^account/$', 'account.account', name='wagtailadmin_account'),
- url(r'^account/change_password/$', 'account.change_password', name='wagtailadmin_account_change_password'),
- url(r'^logout/$', 'account.logout', name='wagtailadmin_logout'),
+ url(r'^account/$', account.account, name='wagtailadmin_account'),
+ url(r'^account/change_password/$', account.change_password, name='wagtailadmin_account_change_password'),
+ url(r'^logout/$', account.logout, name='wagtailadmin_logout'),
- url(r'^userbar/(\d+)/$', 'userbar.for_frontend', name='wagtailadmin_userbar_frontend'),
- url(r'^userbar/moderation/(\d+)/$', 'userbar.for_moderation', name='wagtailadmin_userbar_moderation'),
-)
+ url(r'^userbar/(\d+)/$', userbar.for_frontend, name='wagtailadmin_userbar_frontend'),
+ url(r'^userbar/moderation/(\d+)/$', userbar.for_moderation, name='wagtailadmin_userbar_moderation'),
+]
+
+
+# Import additional urlpatterns from any apps that define a register_admin_urls hook
+for fn in hooks.get_hooks('register_admin_urls'):
+ urls = fn()
+ if urls:
+ urlpatterns += urls
diff --git a/wagtail/wagtailcore/urls.py b/wagtail/wagtailcore/urls.py
index 8a5a12bab..f0336fec4 100644
--- a/wagtail/wagtailcore/urls.py
+++ b/wagtail/wagtailcore/urls.py
@@ -1,11 +1,11 @@
-from django.conf.urls import patterns, url
+from django.conf.urls import url
+from wagtail.wagtailcore import views
-urlpatterns = patterns(
- 'wagtail.wagtailcore.views',
+urlpatterns = [
# All front-end views are handled through Wagtail's core.views.serve mechanism.
# Here we match a (possibly empty) list of path segments, each followed by
# a '/'. If a trailing slash is not present, we leave CommonMiddleware to
# handle it as usual (i.e. redirect it to the trailing slash version if
# settings.APPEND_SLASH is True)
- url(r'^((?:[\w\-]+/)*)$', 'serve')
-)
+ url(r'^((?:[\w\-]+/)*)$', views.serve)
+]
diff --git a/wagtail/wagtaildocs/admin_urls.py b/wagtail/wagtaildocs/admin_urls.py
index cec850572..9eaa3a50e 100644
--- a/wagtail/wagtaildocs/admin_urls.py
+++ b/wagtail/wagtaildocs/admin_urls.py
@@ -1,14 +1,14 @@
-from django.conf.urls import patterns, url
+from django.conf.urls import url
+from wagtail.wagtaildocs.views import documents, chooser
-urlpatterns = patterns(
- 'wagtail.wagtaildocs.views',
- url(r'^$', 'documents.index', name='wagtaildocs_index'),
- url(r'^add/$', 'documents.add', name='wagtaildocs_add_document'),
- url(r'^edit/(\d+)/$', 'documents.edit', name='wagtaildocs_edit_document'),
- url(r'^delete/(\d+)/$', 'documents.delete', name='wagtaildocs_delete_document'),
+urlpatterns = [
+ url(r'^$', documents.index, name='wagtaildocs_index'),
+ url(r'^add/$', documents.add, name='wagtaildocs_add_document'),
+ url(r'^edit/(\d+)/$', documents.edit, name='wagtaildocs_edit_document'),
+ url(r'^delete/(\d+)/$', documents.delete, name='wagtaildocs_delete_document'),
- url(r'^chooser/$', 'chooser.chooser', name='wagtaildocs_chooser'),
- url(r'^chooser/(\d+)/$', 'chooser.document_chosen', name='wagtaildocs_document_chosen'),
- url(r'^chooser/upload/$', 'chooser.chooser_upload', name='wagtaildocs_chooser_upload'),
-)
+ url(r'^chooser/$', chooser.chooser, name='wagtaildocs_chooser'),
+ url(r'^chooser/(\d+)/$', chooser.document_chosen, name='wagtaildocs_document_chosen'),
+ url(r'^chooser/upload/$', chooser.chooser_upload, name='wagtaildocs_chooser_upload'),
+]
diff --git a/wagtail/wagtaildocs/urls.py b/wagtail/wagtaildocs/urls.py
index 5f8ddaf03..d7c481db6 100644
--- a/wagtail/wagtaildocs/urls.py
+++ b/wagtail/wagtaildocs/urls.py
@@ -1,6 +1,6 @@
-from django.conf.urls import patterns, url
+from django.conf.urls import url
+from wagtail.wagtaildocs.views import serve
-urlpatterns = patterns(
- 'wagtail.wagtaildocs.views',
- url(r'^(\d+)/(.*)$', 'serve.serve', name='wagtaildocs_serve'),
-)
+urlpatterns = [
+ url(r'^(\d+)/(.*)$', serve.serve, name='wagtaildocs_serve'),
+]
diff --git a/wagtail/wagtaildocs/wagtail_hooks.py b/wagtail/wagtaildocs/wagtail_hooks.py
new file mode 100644
index 000000000..93d41c9a3
--- /dev/null
+++ b/wagtail/wagtaildocs/wagtail_hooks.py
@@ -0,0 +1,11 @@
+from django.conf.urls import include, url
+
+from wagtail.wagtailadmin import hooks
+from wagtail.wagtaildocs import admin_urls
+
+
+def register_admin_urls():
+ return [
+ url(r'^documents/', include(admin_urls)),
+ ]
+hooks.register('register_admin_urls', register_admin_urls)
diff --git a/wagtail/wagtailembeds/urls.py b/wagtail/wagtailembeds/urls.py
index 157e6b122..40a97bf35 100644
--- a/wagtail/wagtailembeds/urls.py
+++ b/wagtail/wagtailembeds/urls.py
@@ -1,8 +1,8 @@
-from django.conf.urls import patterns, url
+from django.conf.urls import url
+from wagtail.wagtailembeds.views import chooser
-urlpatterns = patterns(
- 'wagtail.wagtailembeds.views',
- url(r'^chooser/$', 'chooser.chooser', name='wagtailembeds_chooser'),
- url(r'^chooser/upload/$', 'chooser.chooser_upload', name='wagtailembeds_chooser_upload'),
-)
+urlpatterns = [
+ url(r'^chooser/$', chooser.chooser, name='wagtailembeds_chooser'),
+ url(r'^chooser/upload/$', chooser.chooser_upload, name='wagtailembeds_chooser_upload'),
+]
diff --git a/wagtail/wagtailembeds/wagtail_hooks.py b/wagtail/wagtailembeds/wagtail_hooks.py
new file mode 100644
index 000000000..0db627881
--- /dev/null
+++ b/wagtail/wagtailembeds/wagtail_hooks.py
@@ -0,0 +1,11 @@
+from django.conf.urls import include, url
+
+from wagtail.wagtailadmin import hooks
+from wagtail.wagtailembeds import urls
+
+
+def register_admin_urls():
+ return [
+ url(r'^embeds/', include(urls)),
+ ]
+hooks.register('register_admin_urls', register_admin_urls)
diff --git a/wagtail/wagtailimages/urls.py b/wagtail/wagtailimages/urls.py
index 10adaadd2..4fa4efaf9 100644
--- a/wagtail/wagtailimages/urls.py
+++ b/wagtail/wagtailimages/urls.py
@@ -1,15 +1,14 @@
-from django.conf.urls import patterns, url
+from django.conf.urls import url
+from wagtail.wagtailimages.views import images, chooser
+urlpatterns = [
+ url(r'^$', images.index, name='wagtailimages_index'),
+ url(r'^(\d+)/$', images.edit, name='wagtailimages_edit_image'),
+ url(r'^(\d+)/delete/$', images.delete, name='wagtailimages_delete_image'),
+ url(r'^add/$', images.add, name='wagtailimages_add_image'),
-urlpatterns = patterns(
- 'wagtail.wagtailimages.views',
- url(r'^$', 'images.index', name='wagtailimages_index'),
- url(r'^(\d+)/$', 'images.edit', name='wagtailimages_edit_image'),
- url(r'^(\d+)/delete/$', 'images.delete', name='wagtailimages_delete_image'),
- url(r'^add/$', 'images.add', name='wagtailimages_add_image'),
-
- url(r'^chooser/$', 'chooser.chooser', name='wagtailimages_chooser'),
- url(r'^chooser/(\d+)/$', 'chooser.image_chosen', name='wagtailimages_image_chosen'),
- url(r'^chooser/upload/$', 'chooser.chooser_upload', name='wagtailimages_chooser_upload'),
- url(r'^chooser/(\d+)/select_format/$', 'chooser.chooser_select_format', name='wagtailimages_chooser_select_format'),
-)
+ url(r'^chooser/$', chooser.chooser, name='wagtailimages_chooser'),
+ url(r'^chooser/(\d+)/$', chooser.image_chosen, name='wagtailimages_image_chosen'),
+ url(r'^chooser/upload/$', chooser.chooser_upload, name='wagtailimages_chooser_upload'),
+ url(r'^chooser/(\d+)/select_format/$', chooser.chooser_select_format, name='wagtailimages_chooser_select_format'),
+]
diff --git a/wagtail/wagtailimages/wagtail_hooks.py b/wagtail/wagtailimages/wagtail_hooks.py
new file mode 100644
index 000000000..2309876a5
--- /dev/null
+++ b/wagtail/wagtailimages/wagtail_hooks.py
@@ -0,0 +1,11 @@
+from django.conf.urls import include, url
+
+from wagtail.wagtailadmin import hooks
+from wagtail.wagtailimages import urls
+
+
+def register_admin_urls():
+ return [
+ url(r'^images/', include(urls)),
+ ]
+hooks.register('register_admin_urls', register_admin_urls)
diff --git a/wagtail/wagtailredirects/urls.py b/wagtail/wagtailredirects/urls.py
index 298065225..1f9d36096 100644
--- a/wagtail/wagtailredirects/urls.py
+++ b/wagtail/wagtailredirects/urls.py
@@ -1,10 +1,10 @@
-from django.conf.urls import patterns, url
+from django.conf.urls import url
+from wagtail.wagtailredirects import views
-urlpatterns = patterns(
- 'wagtail.wagtailredirects.views',
- url(r'^$', 'index', name='wagtailredirects_index'),
- url(r'^(\d+)/$', 'edit', name='wagtailredirects_edit_redirect'),
- url(r'^(\d+)/delete/$', 'delete', name='wagtailredirects_delete_redirect'),
- url(r'^add/$', 'add', name='wagtailredirects_add_redirect'),
-)
+urlpatterns = [
+ url(r'^$', views.index, name='wagtailredirects_index'),
+ url(r'^(\d+)/$', views.edit, name='wagtailredirects_edit_redirect'),
+ url(r'^(\d+)/delete/$', views.delete, name='wagtailredirects_delete_redirect'),
+ url(r'^add/$', views.add, name='wagtailredirects_add_redirect'),
+]
diff --git a/wagtail/wagtailredirects/wagtail_hooks.py b/wagtail/wagtailredirects/wagtail_hooks.py
new file mode 100644
index 000000000..22ae97320
--- /dev/null
+++ b/wagtail/wagtailredirects/wagtail_hooks.py
@@ -0,0 +1,11 @@
+from django.conf.urls import include, url
+
+from wagtail.wagtailadmin import hooks
+from wagtail.wagtailredirects import urls
+
+
+def register_admin_urls():
+ return [
+ url(r'^redirects/', include(urls)),
+ ]
+hooks.register('register_admin_urls', register_admin_urls)
diff --git a/wagtail/wagtailsearch/urls/admin.py b/wagtail/wagtailsearch/urls/admin.py
index 27f687b64..62b9d72c6 100644
--- a/wagtail/wagtailsearch/urls/admin.py
+++ b/wagtail/wagtailsearch/urls/admin.py
@@ -1,13 +1,13 @@
-from django.conf.urls import patterns, url
+from django.conf.urls import url
+from wagtail.wagtailsearch.views import editorspicks, queries
-urlpatterns = patterns(
- "wagtail.wagtailsearch.views",
- url(r"^editorspicks/$", "editorspicks.index", name="wagtailsearch_editorspicks_index"),
- url(r"^editorspicks/add/$", "editorspicks.add", name="wagtailsearch_editorspicks_add"),
- url(r"^editorspicks/(\d+)/$", "editorspicks.edit", name="wagtailsearch_editorspicks_edit"),
- url(r"^editorspicks/(\d+)/delete/$", "editorspicks.delete", name="wagtailsearch_editorspicks_delete"),
+urlpatterns = [
+ url(r"^editorspicks/$", editorspicks.index, name="wagtailsearch_editorspicks_index"),
+ url(r"^editorspicks/add/$", editorspicks.add, name="wagtailsearch_editorspicks_add"),
+ url(r"^editorspicks/(\d+)/$", editorspicks.edit, name="wagtailsearch_editorspicks_edit"),
+ url(r"^editorspicks/(\d+)/delete/$", editorspicks.delete, name="wagtailsearch_editorspicks_delete"),
- url(r"^queries/chooser/$", "queries.chooser", name="wagtailsearch_queries_chooser"),
- url(r"^queries/chooser/results/$", "queries.chooserresults", name="wagtailsearch_queries_chooserresults"),
-)
+ url(r"^queries/chooser/$", queries.chooser, name="wagtailsearch_queries_chooser"),
+ url(r"^queries/chooser/results/$", queries.chooserresults, name="wagtailsearch_queries_chooserresults"),
+]
diff --git a/wagtail/wagtailsearch/urls/frontend.py b/wagtail/wagtailsearch/urls/frontend.py
index ef3764814..dcaebe2c5 100644
--- a/wagtail/wagtailsearch/urls/frontend.py
+++ b/wagtail/wagtailsearch/urls/frontend.py
@@ -1,8 +1,8 @@
-from django.conf.urls import patterns, url
+from django.conf.urls import url
+from wagtail.wagtailsearch.views import search
-urlpatterns = patterns(
- 'wagtail.wagtailsearch.views',
- url(r'^$', 'search', name='wagtailsearch_search'),
- url(r'^suggest/$', 'search', {'use_json': True}, name='wagtailsearch_suggest'),
-)
+urlpatterns = [
+ url(r'^$', search, name='wagtailsearch_search'),
+ url(r'^suggest/$', search, {'use_json': True}, name='wagtailsearch_suggest'),
+]
diff --git a/wagtail/wagtailsearch/wagtail_hooks.py b/wagtail/wagtailsearch/wagtail_hooks.py
new file mode 100644
index 000000000..b8bbd2c06
--- /dev/null
+++ b/wagtail/wagtailsearch/wagtail_hooks.py
@@ -0,0 +1,11 @@
+from django.conf.urls import include, url
+
+from wagtail.wagtailadmin import hooks
+from wagtail.wagtailsearch.urls import admin as admin_urls
+
+
+def register_admin_urls():
+ return [
+ url(r'^search/', include(admin_urls)),
+ ]
+hooks.register('register_admin_urls', register_admin_urls)
diff --git a/wagtail/wagtailsnippets/urls.py b/wagtail/wagtailsnippets/urls.py
index 927c30c28..eb7dc0112 100644
--- a/wagtail/wagtailsnippets/urls.py
+++ b/wagtail/wagtailsnippets/urls.py
@@ -1,16 +1,16 @@
-from django.conf.urls import patterns, url
+from django.conf.urls import url
+from wagtail.wagtailsnippets.views import chooser, snippets
-urlpatterns = patterns(
- 'wagtail.wagtailsnippets.views',
- url(r'^$', 'snippets.index', name='wagtailsnippets_index'),
+urlpatterns = [
+ url(r'^$', snippets.index, name='wagtailsnippets_index'),
- url(r'^choose/$', 'chooser.choose', name='wagtailsnippets_choose_generic'),
- url(r'^choose/(\w+)/(\w+)/$', 'chooser.choose', name='wagtailsnippets_choose'),
- url(r'^choose/(\w+)/(\w+)/(\d+)/$', 'chooser.chosen', name='wagtailsnippets_chosen'),
+ url(r'^choose/$', chooser.choose, name='wagtailsnippets_choose_generic'),
+ url(r'^choose/(\w+)/(\w+)/$', chooser.choose, name='wagtailsnippets_choose'),
+ url(r'^choose/(\w+)/(\w+)/(\d+)/$', chooser.chosen, name='wagtailsnippets_chosen'),
- url(r'^(\w+)/(\w+)/$', 'snippets.list', name='wagtailsnippets_list'),
- url(r'^(\w+)/(\w+)/new/$', 'snippets.create', name='wagtailsnippets_create'),
- url(r'^(\w+)/(\w+)/(\d+)/$', 'snippets.edit', name='wagtailsnippets_edit'),
- url(r'^(\w+)/(\w+)/(\d+)/delete/$', 'snippets.delete', name='wagtailsnippets_delete'),
-)
+ url(r'^(\w+)/(\w+)/$', snippets.list, name='wagtailsnippets_list'),
+ url(r'^(\w+)/(\w+)/new/$', snippets.create, name='wagtailsnippets_create'),
+ url(r'^(\w+)/(\w+)/(\d+)/$', snippets.edit, name='wagtailsnippets_edit'),
+ url(r'^(\w+)/(\w+)/(\d+)/delete/$', snippets.delete, name='wagtailsnippets_delete'),
+]
diff --git a/wagtail/wagtailsnippets/wagtail_hooks.py b/wagtail/wagtailsnippets/wagtail_hooks.py
new file mode 100644
index 000000000..460cf41dc
--- /dev/null
+++ b/wagtail/wagtailsnippets/wagtail_hooks.py
@@ -0,0 +1,11 @@
+from django.conf.urls import include, url
+
+from wagtail.wagtailadmin import hooks
+from wagtail.wagtailsnippets import urls
+
+
+def register_admin_urls():
+ return [
+ url(r'^snippets/', include(urls)),
+ ]
+hooks.register('register_admin_urls', register_admin_urls)
diff --git a/wagtail/wagtailusers/urls.py b/wagtail/wagtailusers/urls.py
index 7832ddba5..87b3d3f5c 100644
--- a/wagtail/wagtailusers/urls.py
+++ b/wagtail/wagtailusers/urls.py
@@ -1,8 +1,8 @@
-from django.conf.urls import patterns, url
+from django.conf.urls import url
+from wagtail.wagtailusers.views import users
-urlpatterns = patterns(
- 'wagtail.wagtailusers.views',
- url(r'^$', 'users.index', name='wagtailusers_index'),
- url(r'^new/$', 'users.create', name='wagtailusers_create'),
- url(r'^(\d+)/$', 'users.edit', name='wagtailusers_edit'),
-)
+urlpatterns = [
+ url(r'^$', users.index, name='wagtailusers_index'),
+ url(r'^new/$', users.create, name='wagtailusers_create'),
+ url(r'^(\d+)/$', users.edit, name='wagtailusers_edit'),
+]
diff --git a/wagtail/wagtailusers/wagtail_hooks.py b/wagtail/wagtailusers/wagtail_hooks.py
new file mode 100644
index 000000000..add9afb2d
--- /dev/null
+++ b/wagtail/wagtailusers/wagtail_hooks.py
@@ -0,0 +1,11 @@
+from django.conf.urls import include, url
+
+from wagtail.wagtailadmin import hooks
+from wagtail.wagtailusers import urls
+
+
+def register_admin_urls():
+ return [
+ url(r'^users/', include(urls)),
+ ]
+hooks.register('register_admin_urls', register_admin_urls)