mirror of https://github.com/django/django.git
Fixed #14675 -- Completed removal of `from django.conf.urls.default import *` usage.
This applies to both our own [test] code and documentation examples. Also: * Moved the functions and handlers from `django.conf.urls.defaults` up to `django.conf.urls` deprecating the former module. * Added documentation for `handler403`. * Tweaked the URLs topic document a bit. Thanks to pupeno and cdestigter for their great work contributing patches. git-svn-id: http://code.djangoproject.com/svn/django/trunk@16818 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
parent
fd90453462
commit
26b8122087
|
@ -1,4 +1,4 @@
|
||||||
from django.conf.urls.defaults import patterns, include, url
|
from django.conf.urls import patterns, include, url
|
||||||
|
|
||||||
# Uncomment the next two lines to enable the admin:
|
# Uncomment the next two lines to enable the admin:
|
||||||
# from django.contrib import admin
|
# from django.contrib import admin
|
||||||
|
|
|
@ -0,0 +1,61 @@
|
||||||
|
from django.core.urlresolvers import (RegexURLPattern,
|
||||||
|
RegexURLResolver, LocaleRegexURLResolver)
|
||||||
|
from django.core.exceptions import ImproperlyConfigured
|
||||||
|
from django.utils.importlib import import_module
|
||||||
|
|
||||||
|
|
||||||
|
__all__ = ['handler403', 'handler404', 'handler500', 'include', 'patterns', 'url']
|
||||||
|
|
||||||
|
handler403 = 'django.views.defaults.permission_denied'
|
||||||
|
handler404 = 'django.views.defaults.page_not_found'
|
||||||
|
handler500 = 'django.views.defaults.server_error'
|
||||||
|
|
||||||
|
def include(arg, namespace=None, app_name=None):
|
||||||
|
if isinstance(arg, tuple):
|
||||||
|
# callable returning a namespace hint
|
||||||
|
if namespace:
|
||||||
|
raise ImproperlyConfigured('Cannot override the namespace for a dynamic module that provides a namespace')
|
||||||
|
urlconf_module, app_name, namespace = arg
|
||||||
|
else:
|
||||||
|
# No namespace hint - use manually provided namespace
|
||||||
|
urlconf_module = arg
|
||||||
|
|
||||||
|
if isinstance(urlconf_module, basestring):
|
||||||
|
urlconf_module = import_module(urlconf_module)
|
||||||
|
patterns = getattr(urlconf_module, 'urlpatterns', urlconf_module)
|
||||||
|
|
||||||
|
# Make sure we can iterate through the patterns (without this, some
|
||||||
|
# testcases will break).
|
||||||
|
if isinstance(patterns, (list, tuple)):
|
||||||
|
for url_pattern in patterns:
|
||||||
|
# Test if the LocaleRegexURLResolver is used within the include;
|
||||||
|
# this should throw an error since this is not allowed!
|
||||||
|
if isinstance(url_pattern, LocaleRegexURLResolver):
|
||||||
|
raise ImproperlyConfigured(
|
||||||
|
'Using i18n_patterns in an included URLconf is not allowed.')
|
||||||
|
|
||||||
|
return (urlconf_module, app_name, namespace)
|
||||||
|
|
||||||
|
def patterns(prefix, *args):
|
||||||
|
pattern_list = []
|
||||||
|
for t in args:
|
||||||
|
if isinstance(t, (list, tuple)):
|
||||||
|
t = url(prefix=prefix, *t)
|
||||||
|
elif isinstance(t, RegexURLPattern):
|
||||||
|
t.add_prefix(prefix)
|
||||||
|
pattern_list.append(t)
|
||||||
|
return pattern_list
|
||||||
|
|
||||||
|
def url(regex, view, kwargs=None, name=None, prefix=''):
|
||||||
|
if isinstance(view, (list,tuple)):
|
||||||
|
# For include(...) processing.
|
||||||
|
urlconf_module, app_name, namespace = view
|
||||||
|
return RegexURLResolver(regex, urlconf_module, kwargs, app_name=app_name, namespace=namespace)
|
||||||
|
else:
|
||||||
|
if isinstance(view, basestring):
|
||||||
|
if not view:
|
||||||
|
raise ImproperlyConfigured('Empty URL pattern view name not permitted (for pattern %r)' % regex)
|
||||||
|
if prefix:
|
||||||
|
view = prefix + '.' + view
|
||||||
|
return RegexURLPattern(regex, view, kwargs, name)
|
||||||
|
|
|
@ -1,61 +1,6 @@
|
||||||
from django.core.urlresolvers import (RegexURLPattern,
|
import warnings
|
||||||
RegexURLResolver, LocaleRegexURLResolver)
|
warnings.warn("django.conf.urls.defaults is deprecated; use django.conf.urls instead",
|
||||||
from django.core.exceptions import ImproperlyConfigured
|
PendingDeprecationWarning)
|
||||||
from django.utils.importlib import import_module
|
|
||||||
|
|
||||||
|
|
||||||
__all__ = ['handler404', 'handler500', 'include', 'patterns', 'url']
|
|
||||||
|
|
||||||
handler403 = 'django.views.defaults.permission_denied'
|
|
||||||
handler404 = 'django.views.defaults.page_not_found'
|
|
||||||
handler500 = 'django.views.defaults.server_error'
|
|
||||||
|
|
||||||
def include(arg, namespace=None, app_name=None):
|
|
||||||
if isinstance(arg, tuple):
|
|
||||||
# callable returning a namespace hint
|
|
||||||
if namespace:
|
|
||||||
raise ImproperlyConfigured('Cannot override the namespace for a dynamic module that provides a namespace')
|
|
||||||
urlconf_module, app_name, namespace = arg
|
|
||||||
else:
|
|
||||||
# No namespace hint - use manually provided namespace
|
|
||||||
urlconf_module = arg
|
|
||||||
|
|
||||||
if isinstance(urlconf_module, basestring):
|
|
||||||
urlconf_module = import_module(urlconf_module)
|
|
||||||
patterns = getattr(urlconf_module, 'urlpatterns', urlconf_module)
|
|
||||||
|
|
||||||
# Make sure we can iterate through the patterns (without this, some
|
|
||||||
# testcases will break).
|
|
||||||
if isinstance(patterns, (list, tuple)):
|
|
||||||
for url_pattern in patterns:
|
|
||||||
# Test if the LocaleRegexURLResolver is used within the include;
|
|
||||||
# this should throw an error since this is not allowed!
|
|
||||||
if isinstance(url_pattern, LocaleRegexURLResolver):
|
|
||||||
raise ImproperlyConfigured(
|
|
||||||
'Using i18n_patterns in an included URLconf is not allowed.')
|
|
||||||
|
|
||||||
return (urlconf_module, app_name, namespace)
|
|
||||||
|
|
||||||
def patterns(prefix, *args):
|
|
||||||
pattern_list = []
|
|
||||||
for t in args:
|
|
||||||
if isinstance(t, (list, tuple)):
|
|
||||||
t = url(prefix=prefix, *t)
|
|
||||||
elif isinstance(t, RegexURLPattern):
|
|
||||||
t.add_prefix(prefix)
|
|
||||||
pattern_list.append(t)
|
|
||||||
return pattern_list
|
|
||||||
|
|
||||||
def url(regex, view, kwargs=None, name=None, prefix=''):
|
|
||||||
if isinstance(view, (list,tuple)):
|
|
||||||
# For include(...) processing.
|
|
||||||
urlconf_module, app_name, namespace = view
|
|
||||||
return RegexURLResolver(regex, urlconf_module, kwargs, app_name=app_name, namespace=namespace)
|
|
||||||
else:
|
|
||||||
if isinstance(view, basestring):
|
|
||||||
if not view:
|
|
||||||
raise ImproperlyConfigured('Empty URL pattern view name not permitted (for pattern %r)' % regex)
|
|
||||||
if prefix:
|
|
||||||
view = prefix + '.' + view
|
|
||||||
return RegexURLPattern(regex, view, kwargs, name)
|
|
||||||
|
|
||||||
|
from django.conf.urls import (handler403, handler404, handler500,
|
||||||
|
include, patterns, url)
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
from django.conf.urls.defaults import patterns
|
from django.conf.urls import patterns
|
||||||
from django.core.urlresolvers import LocaleRegexURLResolver
|
from django.core.urlresolvers import LocaleRegexURLResolver
|
||||||
|
|
||||||
def i18n_patterns(prefix, *args):
|
def i18n_patterns(prefix, *args):
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
from django.conf.urls.defaults import *
|
from django.conf.urls import patterns
|
||||||
|
|
||||||
urlpatterns = patterns('django.views',
|
urlpatterns = patterns('django.views',
|
||||||
(r'^(?P<content_type_id>\d+)/(?P<object_id>.*)/$', 'defaults.shortcut'),
|
(r'^(?P<content_type_id>\d+)/(?P<object_id>.*)/$', 'defaults.shortcut'),
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
import re
|
import re
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
from django.conf.urls.defaults import patterns, url
|
from django.conf.urls import patterns, url
|
||||||
from django.core.exceptions import ImproperlyConfigured
|
from django.core.exceptions import ImproperlyConfigured
|
||||||
|
|
||||||
def static(prefix, view='django.views.static.serve', **kwargs):
|
def static(prefix, view='django.views.static.serve', **kwargs):
|
||||||
|
|
|
@ -320,7 +320,7 @@ class ModelAdmin(BaseModelAdmin):
|
||||||
super(ModelAdmin, self).__init__()
|
super(ModelAdmin, self).__init__()
|
||||||
|
|
||||||
def get_urls(self):
|
def get_urls(self):
|
||||||
from django.conf.urls.defaults import patterns, url
|
from django.conf.urls import patterns, url
|
||||||
|
|
||||||
def wrap(view):
|
def wrap(view):
|
||||||
def wrapper(*args, **kwargs):
|
def wrapper(*args, **kwargs):
|
||||||
|
|
|
@ -174,7 +174,7 @@ class AdminSite(object):
|
||||||
class MyAdminSite(AdminSite):
|
class MyAdminSite(AdminSite):
|
||||||
|
|
||||||
def get_urls(self):
|
def get_urls(self):
|
||||||
from django.conf.urls.defaults import patterns, url
|
from django.conf.urls import patterns, url
|
||||||
|
|
||||||
urls = super(MyAdminSite, self).get_urls()
|
urls = super(MyAdminSite, self).get_urls()
|
||||||
urls += patterns('',
|
urls += patterns('',
|
||||||
|
@ -199,7 +199,7 @@ class AdminSite(object):
|
||||||
return update_wrapper(inner, view)
|
return update_wrapper(inner, view)
|
||||||
|
|
||||||
def get_urls(self):
|
def get_urls(self):
|
||||||
from django.conf.urls.defaults import patterns, url, include
|
from django.conf.urls import patterns, url, include
|
||||||
|
|
||||||
if settings.DEBUG:
|
if settings.DEBUG:
|
||||||
self.check_dependencies()
|
self.check_dependencies()
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
from django.conf.urls.defaults import *
|
from django.conf.urls import patterns, url
|
||||||
from django.contrib.admindocs import views
|
from django.contrib.admindocs import views
|
||||||
|
|
||||||
urlpatterns = patterns('',
|
urlpatterns = patterns('',
|
||||||
|
|
|
@ -74,7 +74,7 @@ class UserAdmin(admin.ModelAdmin):
|
||||||
return super(UserAdmin, self).get_form(request, obj, **defaults)
|
return super(UserAdmin, self).get_form(request, obj, **defaults)
|
||||||
|
|
||||||
def get_urls(self):
|
def get_urls(self):
|
||||||
from django.conf.urls.defaults import patterns
|
from django.conf.urls import patterns
|
||||||
return patterns('',
|
return patterns('',
|
||||||
(r'^(\d+)/password/$', self.admin_site.admin_view(self.user_change_password))
|
(r'^(\d+)/password/$', self.admin_site.admin_view(self.user_change_password))
|
||||||
) + super(UserAdmin, self).get_urls()
|
) + super(UserAdmin, self).get_urls()
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
from django.conf.urls.defaults import patterns, url
|
from django.conf.urls import patterns, url
|
||||||
from django.contrib.auth import context_processors
|
from django.contrib.auth import context_processors
|
||||||
from django.contrib.auth.urls import urlpatterns
|
from django.contrib.auth.urls import urlpatterns
|
||||||
from django.contrib.auth.views import password_reset
|
from django.contrib.auth.views import password_reset
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
# provided as a convenience to those who want to deploy these URLs elsewhere.
|
# provided as a convenience to those who want to deploy these URLs elsewhere.
|
||||||
# This file is also used to provide a reliable view deployment for test purposes.
|
# This file is also used to provide a reliable view deployment for test purposes.
|
||||||
|
|
||||||
from django.conf.urls.defaults import *
|
from django.conf.urls import patterns
|
||||||
|
|
||||||
urlpatterns = patterns('',
|
urlpatterns = patterns('',
|
||||||
(r'^login/$', 'django.contrib.auth.views.login'),
|
(r'^login/$', 'django.contrib.auth.views.login'),
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
from django.conf.urls.defaults import *
|
from django.conf.urls import patterns, url
|
||||||
|
|
||||||
urlpatterns = patterns('django.contrib.comments.views',
|
urlpatterns = patterns('django.contrib.comments.views',
|
||||||
url(r'^post/$', 'comments.post_comment', name='comments-post-comment'),
|
url(r'^post/$', 'comments.post_comment', name='comments-post-comment'),
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
from django.conf.urls.defaults import *
|
from django.conf.urls import patterns
|
||||||
from django.contrib.databrowse import views
|
from django.contrib.databrowse import views
|
||||||
|
|
||||||
# Note: The views in this URLconf all require a 'models' argument,
|
# Note: The views in this URLconf all require a 'models' argument,
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
from django.conf.urls.defaults import *
|
from django.conf.urls import patterns, include
|
||||||
|
|
||||||
# special urls for flatpage test cases
|
# special urls for flatpage test cases
|
||||||
urlpatterns = patterns('',
|
urlpatterns = patterns('',
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
from django.conf.urls.defaults import *
|
from django.conf.urls import patterns
|
||||||
|
|
||||||
urlpatterns = patterns('django.contrib.flatpages.views',
|
urlpatterns = patterns('django.contrib.flatpages.views',
|
||||||
(r'^(?P<url>.*)$', 'flatpage'),
|
(r'^(?P<url>.*)$', 'flatpage'),
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
This is a URLconf to be loaded by tests.py. Add any URLs needed for tests only.
|
This is a URLconf to be loaded by tests.py. Add any URLs needed for tests only.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
from django.conf.urls.defaults import *
|
from django.conf.urls import patterns, url
|
||||||
from django.contrib.formtools.tests import TestFormPreview, TestWizardClass
|
from django.contrib.formtools.tests import TestFormPreview, TestWizardClass
|
||||||
|
|
||||||
from forms import (ContactWizard, Page1, Page2, Page3, TestForm,
|
from forms import (ContactWizard, Page1, Page2, Page3, TestForm,
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
from django.conf.urls.defaults import patterns, url
|
from django.conf.urls import patterns, url
|
||||||
from django.contrib.formtools.tests.wizard.namedwizardtests.forms import (
|
from django.contrib.formtools.tests.wizard.namedwizardtests.forms import (
|
||||||
SessionContactWizard, CookieContactWizard, Page1, Page2, Page3, Page4)
|
SessionContactWizard, CookieContactWizard, Page1, Page2, Page3, Page4)
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
from django.conf.urls.defaults import *
|
from django.conf.urls import patterns, url
|
||||||
from django.contrib.formtools.tests.wizard.wizardtests.forms import (
|
from django.contrib.formtools.tests.wizard.wizardtests.forms import (
|
||||||
SessionContactWizard, CookieContactWizard, Page1, Page2, Page3, Page4)
|
SessionContactWizard, CookieContactWizard, Page1, Page2, Page3, Page4)
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
from django.conf.urls.defaults import *
|
from django.conf.urls import patterns, include
|
||||||
from django.contrib import admin
|
from django.contrib import admin
|
||||||
|
|
||||||
urlpatterns = patterns('',
|
urlpatterns = patterns('',
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
from django.conf.urls.defaults import *
|
from django.conf.urls import patterns
|
||||||
from feeds import feed_dict
|
from feeds import feed_dict
|
||||||
|
|
||||||
urlpatterns = patterns('',
|
urlpatterns = patterns('',
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
from django.conf.urls.defaults import *
|
from django.conf.urls import patterns
|
||||||
from django.contrib import messages
|
from django.contrib import messages
|
||||||
from django.core.urlresolvers import reverse
|
from django.core.urlresolvers import reverse
|
||||||
from django.http import HttpResponseRedirect, HttpResponse
|
from django.http import HttpResponseRedirect, HttpResponse
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
from django.conf.urls.defaults import *
|
from django.conf.urls import patterns
|
||||||
from django.contrib.sitemaps import Sitemap, GenericSitemap, FlatPageSitemap
|
from django.contrib.sitemaps import Sitemap, GenericSitemap, FlatPageSitemap
|
||||||
from django.contrib.auth.models import User
|
from django.contrib.auth.models import User
|
||||||
|
|
||||||
|
|
|
@ -243,6 +243,12 @@ their deprecation, as per the :ref:`deprecation policy
|
||||||
:mod:`django.contrib.gis.geoip` in 1.4 -- the shortcut in
|
:mod:`django.contrib.gis.geoip` in 1.4 -- the shortcut in
|
||||||
:mod:`django.contrib.gis.utils` will be removed.
|
:mod:`django.contrib.gis.utils` will be removed.
|
||||||
|
|
||||||
|
* In 1.4, functions :func:`~django.conf.urls.include`, :func:`~django.conf.urls.patterns`
|
||||||
|
and :func:`~django.conf.urls.url` plus :data:`~django.conf.urls.handler404`,
|
||||||
|
:data:`~django.conf.urls.handler500` were moved to :mod:`django.conf.urls`
|
||||||
|
from their previous location ``django.conf.urls.defaults``. This module
|
||||||
|
was deprecated at the same time and will be removed in this Django release.
|
||||||
|
|
||||||
2.0
|
2.0
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
|
@ -176,7 +176,7 @@ decouple URLs from Python code.
|
||||||
Here's what a URLconf might look like for the ``Reporter``/``Article``
|
Here's what a URLconf might look like for the ``Reporter``/``Article``
|
||||||
example above::
|
example above::
|
||||||
|
|
||||||
from django.conf.urls.defaults import *
|
from django.conf.urls import patterns, url, include
|
||||||
|
|
||||||
urlpatterns = patterns('',
|
urlpatterns = patterns('',
|
||||||
(r'^articles/(\d{4})/$', 'news.views.year_archive'),
|
(r'^articles/(\d{4})/$', 'news.views.year_archive'),
|
||||||
|
|
|
@ -40,7 +40,7 @@ activate the admin site for your installation, do these three things:
|
||||||
|
|
||||||
.. parsed-literal::
|
.. parsed-literal::
|
||||||
|
|
||||||
from django.conf.urls.defaults import patterns, include, url
|
from django.conf.urls import patterns, include, url
|
||||||
|
|
||||||
# Uncomment the next two lines to enable the admin:
|
# Uncomment the next two lines to enable the admin:
|
||||||
**from django.contrib import admin**
|
**from django.contrib import admin**
|
||||||
|
|
|
@ -78,7 +78,7 @@ point at that file::
|
||||||
|
|
||||||
Time for an example. Edit ``mysite/urls.py`` so it looks like this::
|
Time for an example. Edit ``mysite/urls.py`` so it looks like this::
|
||||||
|
|
||||||
from django.conf.urls.defaults import patterns, include, url
|
from django.conf.urls import patterns, include, url
|
||||||
|
|
||||||
from django.contrib import admin
|
from django.contrib import admin
|
||||||
admin.autodiscover()
|
admin.autodiscover()
|
||||||
|
@ -367,7 +367,7 @@ special: It's just a normal view.
|
||||||
You normally won't have to bother with writing 404 views. By default, URLconfs
|
You normally won't have to bother with writing 404 views. By default, URLconfs
|
||||||
have the following line up top::
|
have the following line up top::
|
||||||
|
|
||||||
from django.conf.urls.defaults import patterns, include, url
|
from django.conf.urls import patterns, include, url
|
||||||
|
|
||||||
That takes care of setting ``handler404`` in the current module. As you can see
|
That takes care of setting ``handler404`` in the current module. As you can see
|
||||||
in ``django/conf/urls/defaults.py``, ``handler404`` is set to
|
in ``django/conf/urls/defaults.py``, ``handler404`` is set to
|
||||||
|
@ -443,7 +443,7 @@ Namely, ``polls.views`` is in every callback.
|
||||||
|
|
||||||
Because this is a common case, the URLconf framework provides a shortcut for
|
Because this is a common case, the URLconf framework provides a shortcut for
|
||||||
common prefixes. You can factor out the common prefixes and add them as the
|
common prefixes. You can factor out the common prefixes and add them as the
|
||||||
first argument to :func:`~django.conf.urls.defaults.patterns`, like so::
|
first argument to :func:`~django.conf.urls.patterns`, like so::
|
||||||
|
|
||||||
urlpatterns = patterns('polls.views',
|
urlpatterns = patterns('polls.views',
|
||||||
(r'^polls/$', 'index'),
|
(r'^polls/$', 'index'),
|
||||||
|
@ -457,21 +457,21 @@ tidier.
|
||||||
|
|
||||||
Since you generally don't want the prefix for one app to be applied to every
|
Since you generally don't want the prefix for one app to be applied to every
|
||||||
callback in your URLconf, you can concatenate multiple
|
callback in your URLconf, you can concatenate multiple
|
||||||
:func:`~django.conf.urls.defaults.patterns`. Your full ``mysite/urls.py`` might
|
:func:`~django.conf.urls.patterns`. Your full ``mysite/urls.py`` might
|
||||||
now look like this::
|
now look like this::
|
||||||
|
|
||||||
from django.conf.urls.defaults import patterns, include, url
|
from django.conf.urls import patterns, include, url
|
||||||
|
|
||||||
from django.contrib import admin
|
from django.contrib import admin
|
||||||
admin.autodiscover()
|
admin.autodiscover()
|
||||||
|
|
||||||
urlpatterns = patterns('polls.views',
|
urlpatterns = patterns('polls.views',
|
||||||
(r'^polls/$', 'index'),
|
(r'^polls/$', 'index'),
|
||||||
(r'^polls/(?P<poll_id>\d+)/$', 'detail'),
|
(r'^polls/(?P<poll_id>\d+)/$', 'detail'),
|
||||||
(r'^polls/(?P<poll_id>\d+)/results/$', 'results'),
|
(r'^polls/(?P<poll_id>\d+)/results/$', 'results'),
|
||||||
(r'^polls/(?P<poll_id>\d+)/vote/$', 'vote'),
|
(r'^polls/(?P<poll_id>\d+)/vote/$', 'vote'),
|
||||||
)
|
)
|
||||||
|
|
||||||
urlpatterns += patterns('',
|
urlpatterns += patterns('',
|
||||||
url(r'^admin/', include(admin.site.urls)),
|
url(r'^admin/', include(admin.site.urls)),
|
||||||
)
|
)
|
||||||
|
@ -494,23 +494,23 @@ URLs within the app directory.
|
||||||
|
|
||||||
Copy the file ``mysite/urls.py`` to ``polls/urls.py``. Then, change
|
Copy the file ``mysite/urls.py`` to ``polls/urls.py``. Then, change
|
||||||
``mysite/urls.py`` to remove the poll-specific URLs and insert an
|
``mysite/urls.py`` to remove the poll-specific URLs and insert an
|
||||||
:func:`~django.conf.urls.defaults.include`, leaving you with::
|
:func:`~django.conf.urls.include`, leaving you with::
|
||||||
|
|
||||||
# This also imports the include function
|
# This also imports the include function
|
||||||
from django.conf.urls.defaults import patterns, include, url
|
from django.conf.urls import patterns, include, url
|
||||||
|
|
||||||
from django.contrib import admin
|
from django.contrib import admin
|
||||||
admin.autodiscover()
|
admin.autodiscover()
|
||||||
|
|
||||||
urlpatterns = patterns('',
|
urlpatterns = patterns('',
|
||||||
(r'^polls/', include('polls.urls')),
|
(r'^polls/', include('polls.urls')),
|
||||||
url(r'^admin/', include(admin.site.urls)),
|
url(r'^admin/', include(admin.site.urls)),
|
||||||
)
|
)
|
||||||
|
|
||||||
:func:`~django.conf.urls.defaults.include` simply references another URLconf.
|
:func:`~django.conf.urls.include` simply references another URLconf.
|
||||||
Note that the regular expression doesn't have a ``$`` (end-of-string match
|
Note that the regular expression doesn't have a ``$`` (end-of-string match
|
||||||
character) but has the trailing slash. Whenever Django encounters
|
character) but has the trailing slash. Whenever Django encounters
|
||||||
:func:`~django.conf.urls.defaults.include`, it chops off whatever part of the
|
:func:`~django.conf.urls.include`, it chops off whatever part of the
|
||||||
URL matched up to that point and sends the remaining string to the included
|
URL matched up to that point and sends the remaining string to the included
|
||||||
URLconf for further processing.
|
URLconf for further processing.
|
||||||
|
|
||||||
|
@ -527,7 +527,7 @@ URLconf by removing the leading "polls/" from each line, and removing the
|
||||||
lines registering the admin site. Your ``polls/urls.py`` file should now look like
|
lines registering the admin site. Your ``polls/urls.py`` file should now look like
|
||||||
this::
|
this::
|
||||||
|
|
||||||
from django.conf.urls.defaults import patterns, include, url
|
from django.conf.urls import patterns, include, url
|
||||||
|
|
||||||
urlpatterns = patterns('polls.views',
|
urlpatterns = patterns('polls.views',
|
||||||
(r'^$', 'index'),
|
(r'^$', 'index'),
|
||||||
|
@ -536,7 +536,7 @@ this::
|
||||||
(r'^(?P<poll_id>\d+)/vote/$', 'vote'),
|
(r'^(?P<poll_id>\d+)/vote/$', 'vote'),
|
||||||
)
|
)
|
||||||
|
|
||||||
The idea behind :func:`~django.conf.urls.defaults.include` and URLconf
|
The idea behind :func:`~django.conf.urls.include` and URLconf
|
||||||
decoupling is to make it easy to plug-and-play URLs. Now that polls are in their
|
decoupling is to make it easy to plug-and-play URLs. Now that polls are in their
|
||||||
own URLconf, they can be placed under "/polls/", or under "/fun_polls/", or
|
own URLconf, they can be placed under "/polls/", or under "/fun_polls/", or
|
||||||
under "/content/polls/", or any other path root, and the app will still work.
|
under "/content/polls/", or any other path root, and the app will still work.
|
||||||
|
|
|
@ -218,7 +218,7 @@ Read on for details.
|
||||||
First, open the ``polls/urls.py`` URLconf. It looks like this, according to the
|
First, open the ``polls/urls.py`` URLconf. It looks like this, according to the
|
||||||
tutorial so far::
|
tutorial so far::
|
||||||
|
|
||||||
from django.conf.urls.defaults import patterns, include, url
|
from django.conf.urls import patterns, include, url
|
||||||
|
|
||||||
urlpatterns = patterns('polls.views',
|
urlpatterns = patterns('polls.views',
|
||||||
(r'^$', 'index'),
|
(r'^$', 'index'),
|
||||||
|
@ -229,7 +229,7 @@ tutorial so far::
|
||||||
|
|
||||||
Change it like so::
|
Change it like so::
|
||||||
|
|
||||||
from django.conf.urls.defaults import patterns, include, url
|
from django.conf.urls import patterns, include, url
|
||||||
from django.views.generic import DetailView, ListView
|
from django.views.generic import DetailView, ListView
|
||||||
from polls.models import Poll
|
from polls.models import Poll
|
||||||
|
|
||||||
|
@ -269,9 +269,9 @@ two views abstract the concepts of "display a list of objects" and
|
||||||
that we have a way to refer to its URL later on (see the
|
that we have a way to refer to its URL later on (see the
|
||||||
documentation about :ref:`naming URL patterns
|
documentation about :ref:`naming URL patterns
|
||||||
<naming-url-patterns>` for information). We're also using the
|
<naming-url-patterns>` for information). We're also using the
|
||||||
:func:`~django.conf.urls.default.url` function from
|
:func:`~django.conf.urls.url` function from
|
||||||
:mod:`django.conf.urls.defaults` here. It's a good habit to use
|
:mod:`django.conf.urls` here. It's a good habit to use
|
||||||
:func:`~django.conf.urls.defaults.url` when you are providing a
|
:func:`~django.conf.urls.url` when you are providing a
|
||||||
pattern name like this.
|
pattern name like this.
|
||||||
|
|
||||||
By default, the :class:`~django.views.generic.list.DetailView` generic
|
By default, the :class:`~django.views.generic.list.DetailView` generic
|
||||||
|
|
|
@ -1831,7 +1831,7 @@ In this example, we register the default ``AdminSite`` instance
|
||||||
``django.contrib.admin.site`` at the URL ``/admin/`` ::
|
``django.contrib.admin.site`` at the URL ``/admin/`` ::
|
||||||
|
|
||||||
# urls.py
|
# urls.py
|
||||||
from django.conf.urls.defaults import *
|
from django.conf.urls import patterns, url, include
|
||||||
from django.contrib import admin
|
from django.contrib import admin
|
||||||
|
|
||||||
admin.autodiscover()
|
admin.autodiscover()
|
||||||
|
@ -1847,7 +1847,7 @@ In this example, we register the ``AdminSite`` instance
|
||||||
``myproject.admin.admin_site`` at the URL ``/myadmin/`` ::
|
``myproject.admin.admin_site`` at the URL ``/myadmin/`` ::
|
||||||
|
|
||||||
# urls.py
|
# urls.py
|
||||||
from django.conf.urls.defaults import *
|
from django.conf.urls import patterns, url, include
|
||||||
from myproject.admin import admin_site
|
from myproject.admin import admin_site
|
||||||
|
|
||||||
urlpatterns = patterns('',
|
urlpatterns = patterns('',
|
||||||
|
@ -1871,7 +1871,7 @@ separate versions of the admin site -- using the ``AdminSite`` instances
|
||||||
respectively::
|
respectively::
|
||||||
|
|
||||||
# urls.py
|
# urls.py
|
||||||
from django.conf.urls.defaults import *
|
from django.conf.urls import patterns, url, include
|
||||||
from myproject.admin import basic_site, advanced_site
|
from myproject.admin import basic_site, advanced_site
|
||||||
|
|
||||||
urlpatterns = patterns('',
|
urlpatterns = patterns('',
|
||||||
|
|
|
@ -143,7 +143,7 @@ enable it in your project's ``urls.py``:
|
||||||
|
|
||||||
.. code-block:: python
|
.. code-block:: python
|
||||||
|
|
||||||
from django.conf.urls.defaults import *
|
from django.conf.urls import patterns, url, include
|
||||||
from django.contrib.comments.feeds import LatestCommentFeed
|
from django.contrib.comments.feeds import LatestCommentFeed
|
||||||
|
|
||||||
urlpatterns = patterns('',
|
urlpatterns = patterns('',
|
||||||
|
@ -161,7 +161,7 @@ syndication feed view:
|
||||||
|
|
||||||
.. code-block:: python
|
.. code-block:: python
|
||||||
|
|
||||||
from django.conf.urls.defaults import *
|
from django.conf.urls import patterns
|
||||||
from django.contrib.comments.feeds import LatestCommentFeed
|
from django.contrib.comments.feeds import LatestCommentFeed
|
||||||
|
|
||||||
feeds = {
|
feeds = {
|
||||||
|
|
|
@ -217,7 +217,7 @@ deploy the new :class:`WizardView` object a URL in the ``urls.py``. The
|
||||||
wizard's :meth:`as_view` method takes a list of your
|
wizard's :meth:`as_view` method takes a list of your
|
||||||
:class:`~django.forms.Form` classes as an argument during instantiation::
|
:class:`~django.forms.Form` classes as an argument during instantiation::
|
||||||
|
|
||||||
from django.conf.urls.defaults import patterns
|
from django.conf.urls import patterns
|
||||||
|
|
||||||
from myapp.forms import ContactForm1, ContactForm2
|
from myapp.forms import ContactForm1, ContactForm2
|
||||||
from myapp.views import ContactWizard
|
from myapp.views import ContactWizard
|
||||||
|
@ -525,7 +525,7 @@ We define our wizard in a ``views.py``::
|
||||||
|
|
||||||
We need to add the ``ContactWizard`` to our ``urls.py`` file::
|
We need to add the ``ContactWizard`` to our ``urls.py`` file::
|
||||||
|
|
||||||
from django.conf.urls.defaults import pattern
|
from django.conf.urls import pattern
|
||||||
|
|
||||||
from myapp.forms import ContactForm1, ContactForm2
|
from myapp.forms import ContactForm1, ContactForm2
|
||||||
from myapp.views import ContactWizard, show_message_form_condition
|
from myapp.views import ContactWizard, show_message_form_condition
|
||||||
|
@ -572,7 +572,7 @@ Additionally you have to pass two more arguments to the
|
||||||
|
|
||||||
Example code for the changed ``urls.py`` file::
|
Example code for the changed ``urls.py`` file::
|
||||||
|
|
||||||
from django.conf.urls.defaults import url, patterns
|
from django.conf.urls import url, patterns
|
||||||
|
|
||||||
from myapp.forms import ContactForm1, ContactForm2
|
from myapp.forms import ContactForm1, ContactForm2
|
||||||
from myapp.views import ContactWizard
|
from myapp.views import ContactWizard
|
||||||
|
|
|
@ -697,7 +697,7 @@ Let's dive in again -- create a file called ``admin.py`` inside the
|
||||||
Next, edit your ``urls.py`` in the ``geodjango`` project folder to look
|
Next, edit your ``urls.py`` in the ``geodjango`` project folder to look
|
||||||
as follows::
|
as follows::
|
||||||
|
|
||||||
from django.conf.urls.defaults import *
|
from django.conf.urls import patterns, url, include
|
||||||
from django.contrib.gis import admin
|
from django.contrib.gis import admin
|
||||||
|
|
||||||
admin.autodiscover()
|
admin.autodiscover()
|
||||||
|
|
|
@ -241,7 +241,7 @@ Example
|
||||||
|
|
||||||
Here's an example of a :doc:`URLconf </topics/http/urls>` using both::
|
Here's an example of a :doc:`URLconf </topics/http/urls>` using both::
|
||||||
|
|
||||||
from django.conf.urls.defaults import *
|
from django.conf.urls import patterns, url, include
|
||||||
from django.contrib.sitemaps import FlatPageSitemap, GenericSitemap
|
from django.contrib.sitemaps import FlatPageSitemap, GenericSitemap
|
||||||
from blog.models import Entry
|
from blog.models import Entry
|
||||||
|
|
||||||
|
|
|
@ -80,7 +80,7 @@ latest five news items::
|
||||||
To connect a URL to this feed, put an instance of the Feed object in
|
To connect a URL to this feed, put an instance of the Feed object in
|
||||||
your :doc:`URLconf </topics/http/urls>`. For example::
|
your :doc:`URLconf </topics/http/urls>`. For example::
|
||||||
|
|
||||||
from django.conf.urls.defaults import *
|
from django.conf.urls import patterns, url, include
|
||||||
from myproject.feeds import LatestEntriesFeed
|
from myproject.feeds import LatestEntriesFeed
|
||||||
|
|
||||||
urlpatterns = patterns('',
|
urlpatterns = patterns('',
|
||||||
|
@ -327,7 +327,7 @@ Here's a full example::
|
||||||
|
|
||||||
And the accompanying URLconf::
|
And the accompanying URLconf::
|
||||||
|
|
||||||
from django.conf.urls.defaults import *
|
from django.conf.urls import patterns, url, include
|
||||||
from myproject.feeds import RssSiteNewsFeed, AtomSiteNewsFeed
|
from myproject.feeds import RssSiteNewsFeed, AtomSiteNewsFeed
|
||||||
|
|
||||||
urlpatterns = patterns('',
|
urlpatterns = patterns('',
|
||||||
|
|
|
@ -524,7 +524,7 @@ pattern, it's possible to give a name to a pattern, and then reference the name
|
||||||
rather than the view function. A named URL pattern is defined by replacing the
|
rather than the view function. A named URL pattern is defined by replacing the
|
||||||
pattern tuple by a call to the ``url`` function)::
|
pattern tuple by a call to the ``url`` function)::
|
||||||
|
|
||||||
from django.conf.urls.defaults import *
|
from django.conf.urls import patterns, url, include
|
||||||
|
|
||||||
url(r'^people/(\d+)/$', 'blog_views.generic_detail', name='people_view'),
|
url(r'^people/(\d+)/$', 'blog_views.generic_detail', name='people_view'),
|
||||||
|
|
||||||
|
|
|
@ -290,9 +290,10 @@ Django 1.4 also includes several smaller improvements worth noting:
|
||||||
MySQL with the InnoDB database engine.
|
MySQL with the InnoDB database engine.
|
||||||
|
|
||||||
* A new 403 response handler has been added as
|
* A new 403 response handler has been added as
|
||||||
``'django.views.defaults.permission_denied'``. See the documentation
|
``'django.views.defaults.permission_denied'``. You can set your own handler by
|
||||||
about :ref:`the 403 (HTTP Forbidden) view<http_forbidden_view>` for more
|
setting the value of :data:`django.conf.urls.handler403`. See the
|
||||||
information.
|
documentation about :ref:`the 403 (HTTP Forbidden) view<http_forbidden_view>`
|
||||||
|
for more information.
|
||||||
|
|
||||||
* The :ttag:`trans` template tag now takes an optional ``as`` argument to
|
* The :ttag:`trans` template tag now takes an optional ``as`` argument to
|
||||||
be able to retrieve a translation string without displaying it but setting
|
be able to retrieve a translation string without displaying it but setting
|
||||||
|
@ -590,3 +591,13 @@ backwards-compatibility shim will be removed entirely.
|
||||||
|
|
||||||
The existence of any ``'filters'`` key under the ``'mail_admins'`` handler will
|
The existence of any ``'filters'`` key under the ``'mail_admins'`` handler will
|
||||||
disable this backward-compatibility shim and deprecation warning.
|
disable this backward-compatibility shim and deprecation warning.
|
||||||
|
|
||||||
|
``django.conf.urls.defaults``
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
Until Django 1.3 the functions :func:`~django.conf.urls.include`,
|
||||||
|
:func:`~django.conf.urls.patterns` and :func:`~django.conf.urls.url` plus
|
||||||
|
:data:`~django.conf.urls.handler404`, :data:`~django.conf.urls.handler500`
|
||||||
|
were located in a ``django.conf.urls.defaults`` module.
|
||||||
|
|
||||||
|
Starting with Django 1.4 they are now available in :mod:`django.conf.urls`.
|
||||||
|
|
|
@ -75,7 +75,7 @@ views themselves are classes, we point the URL to the ``as_view`` class method
|
||||||
instead, which is the entry point for class-based views::
|
instead, which is the entry point for class-based views::
|
||||||
|
|
||||||
# urls.py
|
# urls.py
|
||||||
from django.conf.urls.defaults import *
|
from django.conf.urls import patterns, url, include
|
||||||
from some_app.views import AboutView
|
from some_app.views import AboutView
|
||||||
|
|
||||||
urlpatterns = patterns('',
|
urlpatterns = patterns('',
|
||||||
|
@ -86,7 +86,7 @@ Alternatively, if you're only changing a few simple attributes on a
|
||||||
class-based view, you can simply pass the new attributes into the ``as_view``
|
class-based view, you can simply pass the new attributes into the ``as_view``
|
||||||
method call itself::
|
method call itself::
|
||||||
|
|
||||||
from django.conf.urls.defaults import *
|
from django.conf.urls import patterns, url, include
|
||||||
from django.views.generic import TemplateView
|
from django.views.generic import TemplateView
|
||||||
|
|
||||||
urlpatterns = patterns('',
|
urlpatterns = patterns('',
|
||||||
|
@ -135,7 +135,7 @@ be using these models::
|
||||||
|
|
||||||
To build a list page of all publishers, we'd use a URLconf along these lines::
|
To build a list page of all publishers, we'd use a URLconf along these lines::
|
||||||
|
|
||||||
from django.conf.urls.defaults import *
|
from django.conf.urls import patterns, url, include
|
||||||
from django.views.generic import ListView
|
from django.views.generic import ListView
|
||||||
from books.models import Publisher
|
from books.models import Publisher
|
||||||
|
|
||||||
|
|
|
@ -58,7 +58,7 @@ URLconf tuple for a given pattern.
|
||||||
For example, here's a simple URLconf you could use to present a static "about"
|
For example, here's a simple URLconf you could use to present a static "about"
|
||||||
page::
|
page::
|
||||||
|
|
||||||
from django.conf.urls.defaults import *
|
from django.conf.urls import patterns, url, include
|
||||||
from django.views.generic.simple import direct_to_template
|
from django.views.generic.simple import direct_to_template
|
||||||
|
|
||||||
urlpatterns = patterns('',
|
urlpatterns = patterns('',
|
||||||
|
@ -80,7 +80,7 @@ the URLconf to point to a view function:
|
||||||
|
|
||||||
.. parsed-literal::
|
.. parsed-literal::
|
||||||
|
|
||||||
from django.conf.urls.defaults import *
|
from django.conf.urls import patterns, url, include
|
||||||
from django.views.generic.simple import direct_to_template
|
from django.views.generic.simple import direct_to_template
|
||||||
**from books.views import about_pages**
|
**from books.views import about_pages**
|
||||||
|
|
||||||
|
@ -160,7 +160,7 @@ be using these models::
|
||||||
|
|
||||||
To build a list page of all publishers, we'd use a URLconf along these lines::
|
To build a list page of all publishers, we'd use a URLconf along these lines::
|
||||||
|
|
||||||
from django.conf.urls.defaults import *
|
from django.conf.urls import patterns, url, include
|
||||||
from django.views.generic import list_detail
|
from django.views.generic import list_detail
|
||||||
from books.models import Publisher
|
from books.models import Publisher
|
||||||
|
|
||||||
|
|
|
@ -50,7 +50,7 @@ algorithm the system follows to determine which Python code to execute:
|
||||||
|
|
||||||
2. Django loads that Python module and looks for the variable
|
2. Django loads that Python module and looks for the variable
|
||||||
``urlpatterns``. This should be a Python list, in the format returned by
|
``urlpatterns``. This should be a Python list, in the format returned by
|
||||||
the function :func:`django.conf.urls.defaults.patterns`.
|
the function :func:`django.conf.urls.patterns`.
|
||||||
|
|
||||||
3. Django runs through each URL pattern, in order, and stops at the first
|
3. Django runs through each URL pattern, in order, and stops at the first
|
||||||
one that matches the requested URL.
|
one that matches the requested URL.
|
||||||
|
@ -69,7 +69,7 @@ Example
|
||||||
|
|
||||||
Here's a sample URLconf::
|
Here's a sample URLconf::
|
||||||
|
|
||||||
from django.conf.urls.defaults import *
|
from django.conf.urls import patterns, url, include
|
||||||
|
|
||||||
urlpatterns = patterns('',
|
urlpatterns = patterns('',
|
||||||
(r'^articles/2003/$', 'news.views.special_case_2003'),
|
(r'^articles/2003/$', 'news.views.special_case_2003'),
|
||||||
|
@ -80,9 +80,6 @@ Here's a sample URLconf::
|
||||||
|
|
||||||
Notes:
|
Notes:
|
||||||
|
|
||||||
* ``from django.conf.urls.defaults import *`` makes the ``patterns()``
|
|
||||||
function available.
|
|
||||||
|
|
||||||
* To capture a value from the URL, just put parenthesis around it.
|
* To capture a value from the URL, just put parenthesis around it.
|
||||||
|
|
||||||
* There's no need to add a leading slash, because every URL has that. For
|
* There's no need to add a leading slash, because every URL has that. For
|
||||||
|
@ -184,13 +181,21 @@ Syntax of the urlpatterns variable
|
||||||
==================================
|
==================================
|
||||||
|
|
||||||
``urlpatterns`` should be a Python list, in the format returned by the function
|
``urlpatterns`` should be a Python list, in the format returned by the function
|
||||||
:func:`django.conf.urls.defaults.patterns`. Always use ``patterns()`` to create
|
:func:`django.conf.urls.patterns`. Always use ``patterns()`` to create
|
||||||
the ``urlpatterns`` variable.
|
the ``urlpatterns`` variable.
|
||||||
|
|
||||||
Convention is to use ``from django.conf.urls.defaults import *`` at the top of
|
``django.conf.urls`` utility functions
|
||||||
your URLconf. This gives your module access to these objects:
|
======================================
|
||||||
|
|
||||||
.. module:: django.conf.urls.defaults
|
.. module:: django.conf.urls
|
||||||
|
|
||||||
|
.. deprecated:: 1.4
|
||||||
|
Starting with Django 1.4 functions ``patterns``, ``url``, ``include`` plus
|
||||||
|
the ``handler*`` symbols described below live in the ``django.conf.urls``
|
||||||
|
module.
|
||||||
|
|
||||||
|
Until Django 1.3 they were located in ``django.conf.urls.defaults``. You
|
||||||
|
still can import them from there but it will be removed in Django 1.6.
|
||||||
|
|
||||||
patterns
|
patterns
|
||||||
--------
|
--------
|
||||||
|
@ -281,6 +286,24 @@ URLconf will have no effect.
|
||||||
See the documentation on :ref:`customizing error views
|
See the documentation on :ref:`customizing error views
|
||||||
<customizing-error-views>` for more details.
|
<customizing-error-views>` for more details.
|
||||||
|
|
||||||
|
handler403
|
||||||
|
----------
|
||||||
|
|
||||||
|
.. data:: handler403
|
||||||
|
|
||||||
|
A callable, or a string representing the full Python import path to the view
|
||||||
|
that should be called if the user has no the permissions required to access
|
||||||
|
a resource.
|
||||||
|
|
||||||
|
By default, this is ``'django.views.defaults.permission_denied'``. That default
|
||||||
|
value should suffice.
|
||||||
|
|
||||||
|
See the documentation about :ref:`the 403 (HTTP Forbidden) view
|
||||||
|
<http_forbidden_view>` for more information.
|
||||||
|
|
||||||
|
.. versionadded:: 1.4
|
||||||
|
``handler403`` is new in Django 1.4.
|
||||||
|
|
||||||
handler404
|
handler404
|
||||||
----------
|
----------
|
||||||
|
|
||||||
|
@ -355,7 +378,7 @@ code duplication.
|
||||||
|
|
||||||
Here's the example URLconf from the :doc:`Django overview </intro/overview>`::
|
Here's the example URLconf from the :doc:`Django overview </intro/overview>`::
|
||||||
|
|
||||||
from django.conf.urls.defaults import *
|
from django.conf.urls import patterns, url, include
|
||||||
|
|
||||||
urlpatterns = patterns('',
|
urlpatterns = patterns('',
|
||||||
(r'^articles/(\d{4})/$', 'news.views.year_archive'),
|
(r'^articles/(\d{4})/$', 'news.views.year_archive'),
|
||||||
|
@ -370,7 +393,7 @@ each view function.
|
||||||
|
|
||||||
With this in mind, the above example can be written more concisely as::
|
With this in mind, the above example can be written more concisely as::
|
||||||
|
|
||||||
from django.conf.urls.defaults import *
|
from django.conf.urls import patterns, url, include
|
||||||
|
|
||||||
urlpatterns = patterns('news.views',
|
urlpatterns = patterns('news.views',
|
||||||
(r'^articles/(\d{4})/$', 'year_archive'),
|
(r'^articles/(\d{4})/$', 'year_archive'),
|
||||||
|
@ -391,7 +414,7 @@ Just add multiple ``patterns()`` objects together, like this:
|
||||||
|
|
||||||
Old::
|
Old::
|
||||||
|
|
||||||
from django.conf.urls.defaults import *
|
from django.conf.urls import patterns, url, include
|
||||||
|
|
||||||
urlpatterns = patterns('',
|
urlpatterns = patterns('',
|
||||||
(r'^$', 'django.views.generic.date_based.archive_index'),
|
(r'^$', 'django.views.generic.date_based.archive_index'),
|
||||||
|
@ -401,7 +424,7 @@ Old::
|
||||||
|
|
||||||
New::
|
New::
|
||||||
|
|
||||||
from django.conf.urls.defaults import *
|
from django.conf.urls import patterns, url, include
|
||||||
|
|
||||||
urlpatterns = patterns('django.views.generic.date_based',
|
urlpatterns = patterns('django.views.generic.date_based',
|
||||||
(r'^$', 'archive_index'),
|
(r'^$', 'archive_index'),
|
||||||
|
@ -421,7 +444,7 @@ essentially "roots" a set of URLs below other ones.
|
||||||
For example, here's the URLconf for the `Django Web site`_ itself. It includes a
|
For example, here's the URLconf for the `Django Web site`_ itself. It includes a
|
||||||
number of other URLconfs::
|
number of other URLconfs::
|
||||||
|
|
||||||
from django.conf.urls.defaults import *
|
from django.conf.urls import patterns, url, include
|
||||||
|
|
||||||
urlpatterns = patterns('',
|
urlpatterns = patterns('',
|
||||||
(r'^weblog/', include('django_website.apps.blog.urls.blog')),
|
(r'^weblog/', include('django_website.apps.blog.urls.blog')),
|
||||||
|
@ -439,7 +462,7 @@ Another possibility is to include additional URL patterns not by specifying the
|
||||||
URLconf Python module defining them as the `include`_ argument but by using
|
URLconf Python module defining them as the `include`_ argument but by using
|
||||||
directly the pattern list as returned by `patterns`_ instead. For example::
|
directly the pattern list as returned by `patterns`_ instead. For example::
|
||||||
|
|
||||||
from django.conf.urls.defaults import *
|
from django.conf.urls import patterns, url, include
|
||||||
|
|
||||||
extra_patterns = patterns('',
|
extra_patterns = patterns('',
|
||||||
url(r'reports/(?P<id>\d+)/$', 'credit.views.report', name='credit-reports'),
|
url(r'reports/(?P<id>\d+)/$', 'credit.views.report', name='credit-reports'),
|
||||||
|
@ -784,8 +807,8 @@ following would happen:
|
||||||
* ``foo:index`` will again resolve to the index page of the instance ``foo``.
|
* ``foo:index`` will again resolve to the index page of the instance ``foo``.
|
||||||
|
|
||||||
|
|
||||||
Utility methods
|
``django.core.urlresolvers`` utility functions
|
||||||
===============
|
==============================================
|
||||||
|
|
||||||
.. currentmodule:: django.core.urlresolvers
|
.. currentmodule:: django.core.urlresolvers
|
||||||
|
|
||||||
|
@ -793,7 +816,7 @@ reverse()
|
||||||
---------
|
---------
|
||||||
|
|
||||||
If you need to use something similar to the :ttag:`url` template tag in
|
If you need to use something similar to the :ttag:`url` template tag in
|
||||||
your code, Django provides the following method (in the
|
your code, Django provides the following function (in the
|
||||||
:mod:`django.core.urlresolvers` module):
|
:mod:`django.core.urlresolvers` module):
|
||||||
|
|
||||||
.. function:: reverse(viewname, [urlconf=None, args=None, kwargs=None, current_app=None])
|
.. function:: reverse(viewname, [urlconf=None, args=None, kwargs=None, current_app=None])
|
||||||
|
@ -859,7 +882,7 @@ reverse_lazy()
|
||||||
A lazily evaluated version of `reverse()`_.
|
A lazily evaluated version of `reverse()`_.
|
||||||
|
|
||||||
It is useful for when you need to use a URL reversal before your project's
|
It is useful for when you need to use a URL reversal before your project's
|
||||||
URLConf is loaded. Some common cases where this method is necessary are:
|
URLConf is loaded. Some common cases where this function is necessary are:
|
||||||
|
|
||||||
* providing a reversed URL as the ``url`` attribute of a generic class-based
|
* providing a reversed URL as the ``url`` attribute of a generic class-based
|
||||||
view.
|
view.
|
||||||
|
|
|
@ -819,11 +819,11 @@ Language prefix in URL patterns
|
||||||
.. function:: i18n_patterns(prefix, pattern_description, ...)
|
.. function:: i18n_patterns(prefix, pattern_description, ...)
|
||||||
|
|
||||||
This function can be used in your root URLconf as a replacement for the normal
|
This function can be used in your root URLconf as a replacement for the normal
|
||||||
:func:`django.conf.urls.defaults.patterns` function. Django will automatically
|
:func:`django.conf.urls.patterns` function. Django will automatically
|
||||||
prepend the current active language code to all url patterns defined within
|
prepend the current active language code to all url patterns defined within
|
||||||
:func:`~django.conf.urls.i18n.i18n_patterns`. Example URL patterns::
|
:func:`~django.conf.urls.i18n.i18n_patterns`. Example URL patterns::
|
||||||
|
|
||||||
from django.conf.urls.defaults import patterns, include, url
|
from django.conf.urls import patterns, include, url
|
||||||
from django.conf.urls.i18n import i18n_patterns
|
from django.conf.urls.i18n import i18n_patterns
|
||||||
|
|
||||||
urlpatterns = patterns(''
|
urlpatterns = patterns(''
|
||||||
|
@ -877,7 +877,7 @@ Translating URL patterns
|
||||||
URL patterns can also be marked translatable using the
|
URL patterns can also be marked translatable using the
|
||||||
:func:`~django.utils.translation.ugettext_lazy` function. Example::
|
:func:`~django.utils.translation.ugettext_lazy` function. Example::
|
||||||
|
|
||||||
from django.conf.urls.defaults import patterns, include, url
|
from django.conf.urls import patterns, include, url
|
||||||
from django.conf.urls.i18n import i18n_patterns
|
from django.conf.urls.i18n import i18n_patterns
|
||||||
from django.utils.translation import ugettext_lazy as _
|
from django.utils.translation import ugettext_lazy as _
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
from django.conf.urls.defaults import *
|
from django.conf.urls import patterns
|
||||||
from django.views.generic import RedirectView
|
from django.views.generic import RedirectView
|
||||||
import views
|
import views
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
"""
|
"""
|
||||||
A second, custom AdminSite -- see tests.CustomAdminSiteTests.
|
A second, custom AdminSite -- see tests.CustomAdminSiteTests.
|
||||||
"""
|
"""
|
||||||
from django.conf.urls.defaults import patterns
|
from django.conf.urls import patterns
|
||||||
from django.contrib import admin
|
from django.contrib import admin
|
||||||
from django.http import HttpResponse
|
from django.http import HttpResponse
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
from django.conf.urls.defaults import *
|
from django.conf.urls import patterns, include
|
||||||
from django.contrib import admin
|
from django.contrib import admin
|
||||||
import views
|
import views
|
||||||
import customadmin
|
import customadmin
|
||||||
|
|
|
@ -1,5 +1,4 @@
|
||||||
|
from django.conf.urls import patterns, include
|
||||||
from django.conf.urls.defaults import *
|
|
||||||
import widgetadmin
|
import widgetadmin
|
||||||
|
|
||||||
urlpatterns = patterns('',
|
urlpatterns = patterns('',
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
from django.conf.urls.defaults import *
|
from django.conf.urls import patterns, url
|
||||||
from django.contrib.comments.feeds import LatestCommentFeed
|
from django.contrib.comments.feeds import LatestCommentFeed
|
||||||
|
|
||||||
feeds = {
|
feeds = {
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
from django.conf.urls.defaults import *
|
from django.conf.urls import patterns, include
|
||||||
from django.contrib import admin
|
from django.contrib import admin
|
||||||
from django.contrib.comments.admin import CommentsAdmin
|
from django.contrib.comments.admin import CommentsAdmin
|
||||||
from django.contrib.comments.models import Comment
|
from django.contrib.comments.models import Comment
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
from django.conf.urls.defaults import *
|
from django.conf.urls import patterns
|
||||||
import views
|
import views
|
||||||
|
|
||||||
urlpatterns = patterns('',
|
urlpatterns = patterns('',
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
from django.conf.urls.defaults import *
|
from django.conf.urls import patterns, url
|
||||||
|
|
||||||
import views
|
import views
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
from django.conf.urls.defaults import *
|
from django.conf.urls import patterns
|
||||||
import views
|
import views
|
||||||
|
|
||||||
urlpatterns = patterns('',
|
urlpatterns = patterns('',
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
from django.conf.urls.defaults import *
|
from django.conf.urls import patterns, include
|
||||||
from django.contrib import admin
|
from django.contrib import admin
|
||||||
|
|
||||||
urlpatterns = patterns('',
|
urlpatterns = patterns('',
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
from django.conf.urls.defaults import *
|
from django.conf.urls import patterns, url
|
||||||
from django.views.generic import TemplateView
|
from django.views.generic import TemplateView
|
||||||
from django.views.decorators.cache import cache_page
|
from django.views.decorators.cache import cache_page
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
from django.conf.urls.defaults import patterns, include, url
|
from django.conf.urls import patterns, include, url
|
||||||
from django.conf.urls.i18n import i18n_patterns
|
from django.conf.urls.i18n import i18n_patterns
|
||||||
from django.utils.translation import ugettext_lazy as _
|
from django.utils.translation import ugettext_lazy as _
|
||||||
from django.views.generic import TemplateView
|
from django.views.generic import TemplateView
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
from django.conf.urls.defaults import url
|
from django.conf.urls import url
|
||||||
from django.conf.urls.i18n import i18n_patterns
|
from django.conf.urls.i18n import i18n_patterns
|
||||||
from django.views.generic import TemplateView
|
from django.views.generic import TemplateView
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
from django.conf.urls.defaults import patterns, url
|
from django.conf.urls import patterns, url
|
||||||
from django.utils.translation import ugettext_lazy as _
|
from django.utils.translation import ugettext_lazy as _
|
||||||
from django.views.generic import TemplateView
|
from django.views.generic import TemplateView
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
from django.conf.urls.defaults import include, url
|
from django.conf.urls import include, url
|
||||||
from django.conf.urls.i18n import i18n_patterns
|
from django.conf.urls.i18n import i18n_patterns
|
||||||
from django.utils.translation import ugettext_lazy as _
|
from django.utils.translation import ugettext_lazy as _
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
from django.conf.urls.defaults import url
|
from django.conf.urls import url
|
||||||
from django.conf.urls.i18n import i18n_patterns
|
from django.conf.urls.i18n import i18n_patterns
|
||||||
from django.utils.translation import ugettext_lazy as _
|
from django.utils.translation import ugettext_lazy as _
|
||||||
from django.views.generic import TemplateView
|
from django.views.generic import TemplateView
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
from django.conf.urls.defaults import patterns
|
from django.conf.urls import patterns
|
||||||
from django.http import HttpResponse
|
from django.http import HttpResponse
|
||||||
|
|
||||||
urlpatterns = patterns('',
|
urlpatterns = patterns('',
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
from django.conf.urls.defaults import patterns
|
from django.conf.urls import patterns
|
||||||
|
|
||||||
urlpatterns = patterns('',
|
urlpatterns = patterns('',
|
||||||
(r'^middleware/customurlconf/noslash$', 'view'),
|
(r'^middleware/customurlconf/noslash$', 'view'),
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
from django.conf.urls.defaults import patterns
|
from django.conf.urls import patterns
|
||||||
|
|
||||||
urlpatterns = patterns('',
|
urlpatterns = patterns('',
|
||||||
(r'^noslash$', 'view'),
|
(r'^noslash$', 'view'),
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
# coding: utf-8
|
# coding: utf-8
|
||||||
from django.conf.urls.defaults import *
|
from django.conf.urls import patterns
|
||||||
|
|
||||||
import views
|
import views
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
from django.conf.urls.defaults import *
|
from django.conf.urls import patterns, url
|
||||||
|
|
||||||
urlpatterns = patterns('',
|
urlpatterns = patterns('',
|
||||||
url(r'^guitarists/(\w{1,50})/$', 'unimplemented_view_placeholder', name='guitarist_detail'),
|
url(r'^guitarists/(\w{1,50})/$', 'unimplemented_view_placeholder', name='guitarist_detail'),
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
# coding: utf-8
|
# coding: utf-8
|
||||||
from django.conf.urls.defaults import *
|
from django.conf.urls import patterns
|
||||||
from django.views.generic.list_detail import object_detail
|
from django.views.generic.list_detail import object_detail
|
||||||
from models import Article
|
from models import Article
|
||||||
import views
|
import views
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
from django.conf.urls.defaults import patterns, url
|
from django.conf.urls import patterns, url
|
||||||
|
|
||||||
urlpatterns = patterns('',
|
urlpatterns = patterns('',
|
||||||
url(r'^static/(?P<path>.*)$', 'django.contrib.staticfiles.views.serve'),
|
url(r'^static/(?P<path>.*)$', 'django.contrib.staticfiles.views.serve'),
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
from django.conf.urls.defaults import *
|
from django.conf.urls import patterns
|
||||||
|
|
||||||
import feeds
|
import feeds
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
# coding: utf-8
|
# coding: utf-8
|
||||||
from django.conf.urls.defaults import *
|
from django.conf.urls import patterns, url
|
||||||
|
|
||||||
from regressiontests.templates import views
|
from regressiontests.templates import views
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
# coding: utf-8
|
# coding: utf-8
|
||||||
from django.conf.urls.defaults import *
|
from django.conf.urls import patterns, url
|
||||||
from regressiontests.templates import views
|
from regressiontests.templates import views
|
||||||
|
|
||||||
urlpatterns = patterns('',
|
urlpatterns = patterns('',
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
from django.conf.urls.defaults import *
|
from django.conf.urls import patterns, url
|
||||||
from django.views.generic import RedirectView
|
from django.views.generic import RedirectView
|
||||||
import views
|
import views
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
from django.conf.urls.defaults import patterns
|
from django.conf.urls import patterns
|
||||||
|
|
||||||
import views
|
import views
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
from django.conf.urls.defaults import patterns, url
|
from django.conf.urls import patterns, url
|
||||||
|
|
||||||
urlpatterns = patterns('',
|
urlpatterns = patterns('',
|
||||||
# View has erroneous import
|
# View has erroneous import
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
Some extra URL patterns that are included at the top level.
|
Some extra URL patterns that are included at the top level.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
from django.conf.urls.defaults import *
|
from django.conf.urls import patterns, url, include
|
||||||
from views import empty_view
|
from views import empty_view
|
||||||
|
|
||||||
urlpatterns = patterns('',
|
urlpatterns = patterns('',
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
from django.conf.urls.defaults import *
|
from django.conf.urls import patterns, url, include
|
||||||
from views import empty_view
|
from views import empty_view
|
||||||
|
|
||||||
urlpatterns = patterns('',
|
urlpatterns = patterns('',
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
from django.conf.urls.defaults import *
|
from django.conf.urls import patterns, url
|
||||||
from views import empty_view
|
from views import empty_view
|
||||||
|
|
||||||
urlpatterns = patterns('',
|
urlpatterns = patterns('',
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
from django.conf.urls.defaults import *
|
from django.conf.urls import patterns, url, include
|
||||||
from namespace_urls import URLObject
|
from namespace_urls import URLObject
|
||||||
from views import view_class_instance
|
from views import view_class_instance
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
from django.conf.urls.defaults import *
|
from django.conf.urls import patterns, url
|
||||||
from views import empty_view
|
from views import empty_view
|
||||||
|
|
||||||
urlpatterns = patterns('',
|
urlpatterns = patterns('',
|
||||||
|
|
|
@ -5,7 +5,7 @@ each name to resolve and Django must distinguish the possibilities based on the
|
||||||
argument list.
|
argument list.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
from django.conf.urls.defaults import *
|
from django.conf.urls import patterns, url
|
||||||
from views import empty_view
|
from views import empty_view
|
||||||
|
|
||||||
urlpatterns = patterns('',
|
urlpatterns = patterns('',
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
from django.conf.urls.defaults import *
|
from django.conf.urls import patterns, url, include
|
||||||
from views import empty_view
|
from views import empty_view
|
||||||
|
|
||||||
urlpatterns = patterns('',
|
urlpatterns = patterns('',
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
from django.conf.urls.defaults import *
|
from django.conf.urls import patterns, url, include
|
||||||
from views import view_class_instance
|
from views import view_class_instance
|
||||||
|
|
||||||
class URLObject(object):
|
class URLObject(object):
|
||||||
|
|
|
@ -1,2 +1,2 @@
|
||||||
#from django.conf.urls.defaults import *
|
#from django.conf.urls import patterns, url, include
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
from django.conf.urls.defaults import *
|
from django.conf.urls import patterns, url
|
||||||
|
|
||||||
from views import empty_view, LazyRedirectView, login_required_view
|
from views import empty_view, LazyRedirectView, login_required_view
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
from django.conf.urls.defaults import *
|
from django.conf.urls import patterns, url
|
||||||
from django.template import Template, Context
|
from django.template import Template, Context
|
||||||
from django.http import HttpResponse
|
from django.http import HttpResponse
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
from django.conf.urls.defaults import *
|
from django.conf.urls import patterns, url, include
|
||||||
|
|
||||||
import urlconf_inner
|
import urlconf_inner
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
from django.conf.urls.defaults import *
|
from django.conf.urls import patterns, url, include
|
||||||
from views import empty_view, absolute_kwargs_view
|
from views import empty_view, absolute_kwargs_view
|
||||||
|
|
||||||
other_patterns = patterns('',
|
other_patterns = patterns('',
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
# Used by the ErrorHandlerResolutionTests test case.
|
# Used by the ErrorHandlerResolutionTests test case.
|
||||||
|
|
||||||
from django.conf.urls.defaults import patterns
|
from django.conf.urls import patterns
|
||||||
|
|
||||||
urlpatterns = patterns('')
|
urlpatterns = patterns('')
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
# Used by the ErrorHandlerResolutionTests test case.
|
# Used by the ErrorHandlerResolutionTests test case.
|
||||||
|
|
||||||
from django.conf.urls.defaults import patterns
|
from django.conf.urls import patterns
|
||||||
from views import empty_view
|
from views import empty_view
|
||||||
|
|
||||||
urlpatterns = patterns('')
|
urlpatterns = patterns('')
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
# A URLs file that doesn't use the default
|
# A URLs file that doesn't use the default
|
||||||
# from django.conf.urls.defaults import *
|
# from django.conf.urls import *
|
||||||
# import pattern.
|
# import pattern.
|
||||||
from django.conf.urls.defaults import patterns, url
|
from django.conf.urls import patterns, url
|
||||||
from views import empty_view, bad_view
|
from views import empty_view, bad_view
|
||||||
|
|
||||||
urlpatterns = patterns('',
|
urlpatterns = patterns('',
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
# -*- coding:utf-8 -*-
|
# -*- coding:utf-8 -*-
|
||||||
from django.conf.urls.defaults import patterns, url
|
from django.conf.urls import patterns, url
|
||||||
|
|
||||||
from models import *
|
from models import *
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
# coding: utf-8
|
# coding: utf-8
|
||||||
from os import path
|
from os import path
|
||||||
|
|
||||||
from django.conf.urls.defaults import *
|
from django.conf.urls import patterns, url, include
|
||||||
|
|
||||||
import views
|
import views
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
from django.conf.urls.defaults import *
|
from django.conf.urls import patterns, include
|
||||||
|
|
||||||
|
|
||||||
urlpatterns = patterns('',
|
urlpatterns = patterns('',
|
||||||
|
|
Loading…
Reference in New Issue