diff options
Diffstat (limited to 'docs/topics')
-rw-r--r-- | docs/topics/cache.txt | 18 | ||||
-rw-r--r-- | docs/topics/class-based-views/generic-display.txt | 20 | ||||
-rw-r--r-- | docs/topics/class-based-views/generic-editing.txt | 6 | ||||
-rw-r--r-- | docs/topics/class-based-views/index.txt | 24 | ||||
-rw-r--r-- | docs/topics/class-based-views/intro.txt | 22 | ||||
-rw-r--r-- | docs/topics/class-based-views/mixins.txt | 6 | ||||
-rw-r--r-- | docs/topics/http/urls.txt | 262 | ||||
-rw-r--r-- | docs/topics/i18n/translation.txt | 47 |
8 files changed, 174 insertions, 231 deletions
diff --git a/docs/topics/cache.txt b/docs/topics/cache.txt index f9623b324b..feeaf37a47 100644 --- a/docs/topics/cache.txt +++ b/docs/topics/cache.txt @@ -532,9 +532,9 @@ The per-view cache, like the per-site cache, is keyed off of the URL. If multiple URLs point at the same view, each URL will be cached separately. Continuing the ``my_view`` example, if your URLconf looks like this:: - urlpatterns = ('', - (r'^foo/(\d{1,2})/$', my_view), - ) + urlpatterns = [ + url(r'^foo/(\d{1,2})/$', my_view), + ] then requests to ``/foo/1/`` and ``/foo/23/`` will be cached separately, as you may expect. But once a particular URL (e.g., ``/foo/23/``) has been @@ -578,17 +578,17 @@ themselves. Doing so is easy: simply wrap the view function with ``cache_page`` when you refer to it in the URLconf. Here's the old URLconf from earlier:: - urlpatterns = ('', - (r'^foo/(\d{1,2})/$', my_view), - ) + urlpatterns = [ + url(r'^foo/(\d{1,2})/$', my_view), + ] Here's the same thing, with ``my_view`` wrapped in ``cache_page``:: from django.views.decorators.cache import cache_page - urlpatterns = ('', - (r'^foo/(\d{1,2})/$', cache_page(60 * 15)(my_view)), - ) + urlpatterns = [ + url(r'^foo/(\d{1,2})/$', cache_page(60 * 15)(my_view)), + ] .. templatetag:: cache diff --git a/docs/topics/class-based-views/generic-display.txt b/docs/topics/class-based-views/generic-display.txt index 9c5527dac5..98d2b79d32 100644 --- a/docs/topics/class-based-views/generic-display.txt +++ b/docs/topics/class-based-views/generic-display.txt @@ -119,12 +119,12 @@ Now we need to define a view:: Finally hook that view into your urls:: # urls.py - from django.conf.urls import patterns, url + from django.conf.urls import url from books.views import PublisherList - urlpatterns = patterns('', + urlpatterns = [ url(r'^publishers/$', PublisherList.as_view()), - ) + ] That's all the Python code we need to write. We still need to write a template, however. We could explicitly tell the view which template to use by adding a @@ -330,12 +330,12 @@ various useful things are stored on ``self``; as well as the request Here, we have a URLconf with a single captured group:: # urls.py - from django.conf.urls import patterns + from django.conf.urls import url from books.views import PublisherBookList - urlpatterns = patterns('', - (r'^books/([\w-]+)/$', PublisherBookList.as_view()), - ) + urlpatterns = [ + url(r'^books/([\w-]+)/$', PublisherBookList.as_view()), + ] Next, we'll write the ``PublisherBookList`` view itself:: @@ -396,13 +396,13 @@ updated. First, we'd need to add an author detail bit in the URLconf to point to a custom view:: - from django.conf.urls import patterns, url + from django.conf.urls import url from books.views import AuthorDetailView - urlpatterns = patterns('', + urlpatterns = [ #... url(r'^authors/(?P<pk>\d+)/$', AuthorDetailView.as_view(), name='author-detail'), - ) + ] Then we'd write our new view -- ``get_object`` is the method that retrieves the object -- so we simply override it and wrap the call:: diff --git a/docs/topics/class-based-views/generic-editing.txt b/docs/topics/class-based-views/generic-editing.txt index 44680148ab..2587c9426d 100644 --- a/docs/topics/class-based-views/generic-editing.txt +++ b/docs/topics/class-based-views/generic-editing.txt @@ -141,15 +141,15 @@ an :exc:`~django.core.exceptions.ImproperlyConfigured` exception if it's not. Finally, we hook these new views into the URLconf:: # urls.py - from django.conf.urls import patterns, url + from django.conf.urls import url from myapp.views import AuthorCreate, AuthorUpdate, AuthorDelete - urlpatterns = patterns('', + urlpatterns = [ # ... url(r'author/add/$', AuthorCreate.as_view(), name='author_add'), url(r'author/(?P<pk>\d+)/$', AuthorUpdate.as_view(), name='author_update'), url(r'author/(?P<pk>\d+)/delete/$', AuthorDelete.as_view(), name='author_delete'), - ) + ] .. note:: diff --git a/docs/topics/class-based-views/index.txt b/docs/topics/class-based-views/index.txt index 84e4597842..dc77f04721 100644 --- a/docs/topics/class-based-views/index.txt +++ b/docs/topics/class-based-views/index.txt @@ -38,12 +38,12 @@ URLconf. If you're only changing a few simple attributes on a class-based view, you can simply pass them into the :meth:`~django.views.generic.base.View.as_view` method call itself:: - from django.conf.urls import patterns + from django.conf.urls import url from django.views.generic import TemplateView - urlpatterns = patterns('', - (r'^about/', TemplateView.as_view(template_name="about.html")), - ) + urlpatterns = [ + url(r'^about/', TemplateView.as_view(template_name="about.html")), + ] Any arguments passed to :meth:`~django.views.generic.base.View.as_view` will override attributes set on the class. In this example, we set ``template_name`` @@ -75,12 +75,12 @@ class method instead, which provides a function-like entry to class-based views:: # urls.py - from django.conf.urls import patterns + from django.conf.urls import url from some_app.views import AboutView - urlpatterns = patterns('', - (r'^about/', AboutView.as_view()), - ) + urlpatterns = [ + url(r'^about/', AboutView.as_view()), + ] For more information on how to use the built in generic views, consult the next @@ -100,12 +100,12 @@ preferable to ask the API when the most recent book was published. We map the URL to book list view in the URLconf:: - from django.conf.urls import patterns + from django.conf.urls import url from books.views import BookListView - urlpatterns = patterns('', - (r'^books/$', BookListView.as_view()), - ) + urlpatterns = [ + url(r'^books/$', BookListView.as_view()), + ] And the view:: diff --git a/docs/topics/class-based-views/intro.txt b/docs/topics/class-based-views/intro.txt index dbd7a83a31..53f32198c6 100644 --- a/docs/topics/class-based-views/intro.txt +++ b/docs/topics/class-based-views/intro.txt @@ -89,12 +89,12 @@ request to a matching method if one is defined, or raises :class:`~django.http.HttpResponseNotAllowed` if not:: # urls.py - from django.conf.urls import patterns + from django.conf.urls import url from myapp.views import MyView - urlpatterns = patterns('', - (r'^about/', MyView.as_view()), - ) + urlpatterns = [ + url(r'^about/', MyView.as_view()), + ] It is worth noting that what your method returns is identical to what you @@ -129,9 +129,9 @@ You can override that in a subclass:: Another option is to configure class attributes as keyword arguments to the :meth:`~django.views.generic.base.View.as_view` call in the URLconf:: - urlpatterns = patterns('', - (r'^about/', GreetingView.as_view(greeting="G'day")), - ) + urlpatterns = [ + url(r'^about/', GreetingView.as_view(greeting="G'day")), + ] .. note:: @@ -268,10 +268,10 @@ The easiest place to do this is in the URLconf where you deploy your view:: from .views import VoteView - urlpatterns = patterns('', - (r'^about/', login_required(TemplateView.as_view(template_name="secret.html"))), - (r'^vote/', permission_required('polls.can_vote')(VoteView.as_view())), - ) + urlpatterns = [ + url(r'^about/', login_required(TemplateView.as_view(template_name="secret.html"))), + url(r'^vote/', permission_required('polls.can_vote')(VoteView.as_view())), + ] This approach applies the decorator on a per-instance basis. If you want every instance of a view to be decorated, you need to take a diff --git a/docs/topics/class-based-views/mixins.txt b/docs/topics/class-based-views/mixins.txt index f0bacca6c1..00729f36f9 100644 --- a/docs/topics/class-based-views/mixins.txt +++ b/docs/topics/class-based-views/mixins.txt @@ -256,13 +256,13 @@ mixin. We can hook this into our URLs easily enough:: # urls.py - from django.conf.urls import patterns, url + from django.conf.urls import url from books.views import RecordInterest - urlpatterns = patterns('', + urlpatterns = [ #... url(r'^author/(?P<pk>\d+)/interest/$', RecordInterest.as_view(), name='author-interest'), - ) + ] Note the ``pk`` named group, which :meth:`~django.views.generic.detail.SingleObjectMixin.get_object` uses diff --git a/docs/topics/http/urls.txt b/docs/topics/http/urls.txt index 46086bc420..05525cc715 100644 --- a/docs/topics/http/urls.txt +++ b/docs/topics/http/urls.txt @@ -45,8 +45,8 @@ algorithm the system follows to determine which Python code to execute: will be used in place of the :setting:`ROOT_URLCONF` setting. 2. Django loads that Python module and looks for the variable - ``urlpatterns``. This should be a Python list, in the format returned by - the function :func:`django.conf.urls.patterns`. + ``urlpatterns``. This should be a Python list of :func:`django.conf.urls.url` + instances. 3. Django runs through each URL pattern, in order, and stops at the first one that matches the requested URL. @@ -72,14 +72,14 @@ Example Here's a sample URLconf:: - from django.conf.urls import patterns, url + from django.conf.urls import url - urlpatterns = patterns('', + urlpatterns = [ url(r'^articles/2003/$', 'news.views.special_case_2003'), url(r'^articles/(\d{4})/$', 'news.views.year_archive'), url(r'^articles/(\d{4})/(\d{2})/$', 'news.views.month_archive'), url(r'^articles/(\d{4})/(\d{2})/(\d+)/$', 'news.views.article_detail'), - ) + ] Notes: @@ -129,14 +129,14 @@ is ``(?P<name>pattern)``, where ``name`` is the name of the group and Here's the above example URLconf, rewritten to use named groups:: - from django.conf.urls import patterns, url + from django.conf.urls import url - urlpatterns = patterns('', + urlpatterns = [ url(r'^articles/2003/$', 'news.views.special_case_2003'), url(r'^articles/(?P<year>\d{4})/$', 'news.views.year_archive'), url(r'^articles/(?P<year>\d{4})/(?P<month>\d{2})/$', 'news.views.month_archive'), url(r'^articles/(?P<year>\d{4})/(?P<month>\d{2})/(?P<day>\d{2})/$', 'news.views.article_detail'), - ) + ] This accomplishes exactly the same thing as the previous example, with one subtle difference: The captured values are passed to view functions as keyword @@ -203,12 +203,12 @@ A convenient trick is to specify default parameters for your views' arguments. Here's an example URLconf and view:: # URLconf - from django.conf.urls import patterns, url + from django.conf.urls import url - urlpatterns = patterns('', + urlpatterns = [ url(r'^blog/$', 'blog.views.page'), url(r'^blog/page(?P<num>\d+)/$', 'blog.views.page'), - ) + ] # View (in blog/views.py) def page(request, num="1"): @@ -230,9 +230,8 @@ accessed. This makes the system blazingly fast. Syntax of the urlpatterns variable ================================== -``urlpatterns`` should be a Python list, in the format returned by the function -:func:`django.conf.urls.patterns`. Always use ``patterns()`` to create -the ``urlpatterns`` variable. +``urlpatterns`` should be a Python list of :func:`~django.conf.urls.url` +instances. Error handling ============== @@ -260,73 +259,6 @@ The variables are: * ``handler403`` -- See :data:`django.conf.urls.handler403`. * ``handler400`` -- See :data:`django.conf.urls.handler400`. -.. _urlpatterns-view-prefix: - -The view prefix -=============== - -You can specify a common prefix in your ``patterns()`` call, to cut down on -code duplication. - -Here's the example URLconf from the :doc:`Django overview </intro/overview>`:: - - from django.conf.urls import patterns, url - - urlpatterns = patterns('', - url(r'^articles/(\d{4})/$', 'news.views.year_archive'), - url(r'^articles/(\d{4})/(\d{2})/$', 'news.views.month_archive'), - url(r'^articles/(\d{4})/(\d{2})/(\d+)/$', 'news.views.article_detail'), - ) - -In this example, each view has a common prefix -- ``'news.views'``. -Instead of typing that out for each entry in ``urlpatterns``, you can use the -first argument to the ``patterns()`` function to specify a prefix to apply to -each view function. - -With this in mind, the above example can be written more concisely as:: - - from django.conf.urls import patterns, url - - urlpatterns = patterns('news.views', - url(r'^articles/(\d{4})/$', 'year_archive'), - url(r'^articles/(\d{4})/(\d{2})/$', 'month_archive'), - url(r'^articles/(\d{4})/(\d{2})/(\d+)/$', 'article_detail'), - ) - -Note that you don't put a trailing dot (``"."``) in the prefix. Django puts -that in automatically. - -Multiple view prefixes ----------------------- - -In practice, you'll probably end up mixing and matching views to the point -where the views in your ``urlpatterns`` won't have a common prefix. However, -you can still take advantage of the view prefix shortcut to remove duplication. -Just add multiple ``patterns()`` objects together, like this: - -Old:: - - from django.conf.urls import patterns, url - - urlpatterns = patterns('', - url(r'^$', 'myapp.views.app_index'), - url(r'^(?P<year>\d{4})/(?P<month>[a-z]{3})/$', 'myapp.views.month_display'), - url(r'^tag/(?P<tag>\w+)/$', 'weblog.views.tag'), - ) - -New:: - - from django.conf.urls import patterns, url - - urlpatterns = patterns('myapp.views', - url(r'^$', 'app_index'), - url(r'^(?P<year>\d{4})/(?P<month>[a-z]{3})/$','month_display'), - ) - - urlpatterns += patterns('weblog.views', - url(r'^tag/(?P<tag>\w+)/$', 'tag'), - ) - .. _including-other-urlconfs: Including other URLconfs @@ -338,14 +270,14 @@ essentially "roots" a set of URLs below other ones. For example, here's an excerpt of the URLconf for the `Django Web site`_ itself. It includes a number of other URLconfs:: - from django.conf.urls import include, patterns, url + from django.conf.urls import include, url - urlpatterns = patterns('', + urlpatterns = [ # ... snip ... url(r'^community/', include('django_website.aggregator.urls')), url(r'^contact/', include('django_website.contact.urls')), # ... snip ... - ) + ] Note that the regular expressions in this example don't have a ``$`` (end-of-string match character) but do include a trailing slash. Whenever @@ -353,23 +285,21 @@ Django encounters ``include()`` (: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 URLconf for further processing. -Another possibility is to include additional URL patterns not by specifying the -URLconf Python module defining them as the ``include()`` argument but by using -directly the pattern list as returned by :func:`~django.conf.urls.patterns` -instead. For example, consider this URLconf:: +Another possibility is to include additional URL patterns by using a list of +:func:`~django.conf.urls.url` instances. For example, consider this URLconf:: - from django.conf.urls import include, patterns, url + from django.conf.urls import include, url - extra_patterns = patterns('', + extra_patterns = [ url(r'^reports/(?P<id>\d+)/$', 'credit.views.report'), url(r'^charge/$', 'credit.views.charge'), - ) + ] - urlpatterns = patterns('', + urlpatterns = [ url(r'^$', 'apps.main.views.homepage'), url(r'^help/', include('apps.help.urls')), url(r'^credit/', include(extra_patterns)), - ) + ] In this example, the ``/credit/reports/`` URL will be handled by the ``credit.views.report()`` Django view. @@ -377,28 +307,30 @@ In this example, the ``/credit/reports/`` URL will be handled by the This can be used to remove redundancy from URLconfs where a single pattern prefix is used repeatedly. For example, consider this URLconf:: - from django.conf.urls import patterns, url + from django.conf.urls import url + from . import views - urlpatterns = patterns('wiki.views', - url(r'^(?P<page_slug>\w+)-(?P<page_id>\w+)/history/$', 'history'), - url(r'^(?P<page_slug>\w+)-(?P<page_id>\w+)/edit/$', 'edit'), - url(r'^(?P<page_slug>\w+)-(?P<page_id>\w+)/discuss/$', 'discuss'), - url(r'^(?P<page_slug>\w+)-(?P<page_id>\w+)/permissions/$', 'permissions'), - ) + urlpatterns = [ + url(r'^(?P<page_slug>\w+)-(?P<page_id>\w+)/history/$', views.history), + url(r'^(?P<page_slug>\w+)-(?P<page_id>\w+)/edit/$', views.edit), + url(r'^(?P<page_slug>\w+)-(?P<page_id>\w+)/discuss/$', views.discuss), + url(r'^(?P<page_slug>\w+)-(?P<page_id>\w+)/permissions/$', views.permissions), + ] We can improve this by stating the common path prefix only once and grouping the suffixes that differ:: - from django.conf.urls import include, patterns, url + from django.conf.urls import include, url + from . import views - urlpatterns = patterns('', - url(r'^(?P<page_slug>\w+)-(?P<page_id>\w+)/', include(patterns('wiki.views', - url(r'^history/$', 'history'), - url(r'^edit/$', 'edit'), - url(r'^discuss/$', 'discuss'), - url(r'^permissions/$', 'permissions'), - ))), - ) + urlpatterns = [ + url(r'^(?P<page_slug>\w+)-(?P<page_id>\w+)/', include([ + url(r'^history/$', views.history), + url(r'^edit/$', views.edit), + url(r'^discuss/$', views.discuss), + url(r'^permissions/$', views.permissions), + ])), + ] .. _`Django Web site`: https://www.djangoproject.com/ @@ -409,19 +341,20 @@ An included URLconf receives any captured parameters from parent URLconfs, so the following example is valid:: # In settings/urls/main.py - from django.conf.urls import include, patterns, url + from django.conf.urls import include, url - urlpatterns = patterns('', + urlpatterns = [ url(r'^(?P<username>\w+)/blog/', include('foo.urls.blog')), - ) + ] # In foo/urls/blog.py - from django.conf.urls import patterns, url + from django.conf.urls import url + from . import views - urlpatterns = patterns('foo.views', - url(r'^$', 'blog.index'), - url(r'^archive/$', 'blog.archive'), - ) + urlpatterns = [ + url(r'^$', views.blog.index), + url(r'^archive/$', views.blog.archive), + ] In the above example, the captured ``"username"`` variable is passed to the included URLconf, as expected. @@ -440,11 +373,12 @@ function. For example:: - from django.conf.urls import patterns, url + from django.conf.urls import url + from . import views - urlpatterns = patterns('blog.views', - url(r'^blog/(?P<year>\d{4})/$', 'year_archive', {'foo': 'bar'}), - ) + urlpatterns = [ + url(r'^blog/(?P<year>\d{4})/$', views.year_archive, {'foo': 'bar'}), + ] In this example, for a request to ``/blog/2005/``, Django will call ``blog.views.year_archive(request, year='2005', foo='bar')``. @@ -472,36 +406,38 @@ For example, these two URLconf sets are functionally identical: Set one:: # main.py - from django.conf.urls import include, patterns, url + from django.conf.urls import include, url - urlpatterns = patterns('', + urlpatterns = [ url(r'^blog/', include('inner'), {'blogid': 3}), - ) + ] # inner.py - from django.conf.urls import patterns, url + from django.conf.urls import url + from mysite import views - urlpatterns = patterns('', - url(r'^archive/$', 'mysite.views.archive'), - url(r'^about/$', 'mysite.views.about'), - ) + urlpatterns = [ + url(r'^archive/$', views.archive), + url(r'^about/$', views.about), + ] Set two:: # main.py - from django.conf.urls import include, patterns, url + from django.conf.urls import include, url + from mysite import views - urlpatterns = patterns('', + urlpatterns = [ url(r'^blog/', include('inner')), - ) + ] # inner.py - from django.conf.urls import patterns, url + from django.conf.urls import url - urlpatterns = patterns('', - url(r'^archive/$', 'mysite.views.archive', {'blogid': 3}), - url(r'^about/$', 'mysite.views.about', {'blogid': 3}), - ) + urlpatterns = [ + url(r'^archive/$', views.archive, {'blogid': 3}), + url(r'^about/$', views.about, {'blogid': 3}), + ] Note that extra options will *always* be passed to *every* line in the included URLconf, regardless of whether the line's view actually accepts those options @@ -517,38 +453,38 @@ supported -- you can pass any callable object as the view. For example, given this URLconf in "string" notation:: - from django.conf.urls import patterns, url + from django.conf.urls import url - urlpatterns = patterns('', + urlpatterns = [ url(r'^archive/$', 'mysite.views.archive'), url(r'^about/$', 'mysite.views.about'), url(r'^contact/$', 'mysite.views.contact'), - ) + ] You can accomplish the same thing by passing objects rather than strings. Just be sure to import the objects:: - from django.conf.urls import patterns, url + from django.conf.urls import url from mysite.views import archive, about, contact - urlpatterns = patterns('', + urlpatterns = [ url(r'^archive/$', archive), url(r'^about/$', about), url(r'^contact/$', contact), - ) + ] The following example is functionally identical. It's just a bit more compact because it imports the module that contains the views, rather than importing each view individually:: - from django.conf.urls import patterns, url + from django.conf.urls import url from mysite import views - urlpatterns = patterns('', + urlpatterns = [ url(r'^archive/$', views.archive), url(r'^about/$', views.about), url(r'^contact/$', views.contact), - ) + ] The style you use is up to you. @@ -558,12 +494,12 @@ the view prefix (as explained in "The view prefix" above) will have no effect. Note that :doc:`class based views</topics/class-based-views/index>` must be imported:: - from django.conf.urls import patterns, url + from django.conf.urls import url from mysite.views import ClassBasedView - urlpatterns = patterns('', + urlpatterns = [ url(r'^myview/$', ClassBasedView.as_view()), - ) + ] Reverse resolution of URLs ========================== @@ -618,13 +554,13 @@ Examples Consider again this URLconf entry:: - from django.conf.urls import patterns, url + from django.conf.urls import url - urlpatterns = patterns('', + urlpatterns = [ #... url(r'^articles/(\d{4})/$', 'news.views.year_archive'), #... - ) + ] According to this design, the URL for the archive corresponding to year *nnnn* is ``/articles/nnnn/``. @@ -670,13 +606,13 @@ It's fairly common to use the same view function in multiple URL patterns in your URLconf. For example, these two URL patterns both point to the ``archive`` view:: - from django.conf.urls import patterns, url + from django.conf.urls import url from mysite.views import archive - urlpatterns = patterns('', + urlpatterns = [ url(r'^archive/(\d{4})/$', archive), url(r'^archive-summary/(\d{4})/$', archive, {'summary': True}), - ) + ] This is completely valid, but it leads to problems when you try to do reverse URL matching (through the :func:`~django.core.urlresolvers.reverse` function @@ -691,13 +627,13 @@ matching. Here's the above example, rewritten to use named URL patterns:: - from django.conf.urls import patterns, url + from django.conf.urls import url from mysite.views import archive - urlpatterns = patterns('', + urlpatterns = [ url(r'^archive/(\d{4})/$', archive, name="full-archive"), url(r'^archive-summary/(\d{4})/$', archive, {'summary': True}, name="arch-summary"), - ) + ] With these names in place (``full-archive`` and ``arch-summary``), you can target each pattern individually by using its name: @@ -859,20 +795,20 @@ This will include the URLs defined in ``apps.help.urls`` into the ``'foo'``. Secondly, you can include an object that contains embedded namespace data. If -you ``include()`` an object as returned by :func:`~django.conf.urls.patterns`, +you ``include()`` a list of :func:`django.conf.urls.url` instances, the URLs contained in that object will be added to the global namespace. However, you can also ``include()`` a 3-tuple containing:: - (<patterns object>, <application namespace>, <instance namespace>) + (<list of url() instances>, <application namespace>, <instance namespace>) For example:: - from django.conf.urls import include, patterns, url + from django.conf.urls import include, url - help_patterns = patterns('', + help_patterns = [ url(r'^basic/$', 'apps.help.views.views.basic'), url(r'^advanced/$', 'apps.help.views.views.advanced'), - ) + ] url(r'^help/', include((help_patterns, 'bar', 'foo'))), diff --git a/docs/topics/i18n/translation.txt b/docs/topics/i18n/translation.txt index 16742ab622..3d48344643 100644 --- a/docs/topics/i18n/translation.txt +++ b/docs/topics/i18n/translation.txt @@ -911,13 +911,15 @@ URL. Paths listed in :setting:`LOCALE_PATHS` are also included. You hook it up like this:: + from django.views.i18n import javascript_catalog + js_info_dict = { 'packages': ('your.app.package',), } - urlpatterns = patterns('', - (r'^jsi18n/$', 'django.views.i18n.javascript_catalog', js_info_dict), - ) + urlpatterns = [ + url(r'^jsi18n/$', javascript_catalog, js_info_dict), + ] Each string in ``packages`` should be in Python dotted-package syntax (the same format as the strings in :setting:`INSTALLED_APPS`) and should refer to a @@ -935,9 +937,9 @@ changed by altering the ``domain`` argument. You can make the view dynamic by putting the packages into the URL pattern:: - urlpatterns = patterns('', - (r'^jsi18n/(?P<packages>\S+?)/$', 'django.views.i18n.javascript_catalog'), - ) + urlpatterns = [ + url(r'^jsi18n/(?P<packages>\S+?)/$', javascript_catalog), + ] With this, you specify the packages as a list of package names delimited by '+' signs in the URL. This is especially useful if your pages use code from @@ -1085,25 +1087,30 @@ Language prefix in URL patterns .. function:: i18n_patterns(prefix, pattern_description, ...) -This function can be used in your root URLconf as a replacement for the normal -:func:`django.conf.urls.patterns` function. Django will automatically +.. deprecated:: 1.8 + + The ``prefix`` argument to ``i18n_patterns()`` has been deprecated and will + not be supported in Django 2.0. Simply pass a list of + :func:`django.conf.urls.url` instances instead. + +This function can be used in your root URLconf and Django will automatically prepend the current active language code to all url patterns defined within :func:`~django.conf.urls.i18n.i18n_patterns`. Example URL patterns:: - from django.conf.urls import patterns, include, url + from django.conf.urls import include, url from django.conf.urls.i18n import i18n_patterns - urlpatterns = patterns('', + urlpatterns = [ url(r'^sitemap\.xml$', 'sitemap.view', name='sitemap_xml'), - ) + ] - news_patterns = patterns('', + news_patterns = [ url(r'^$', 'news.views.index', name='index'), url(r'^category/(?P<slug>[\w-]+)/$', 'news.views.category', name='category'), url(r'^(?P<slug>[\w-]+)/$', 'news.views.details', name='detail'), - ) + ] - urlpatterns += i18n_patterns('', + urlpatterns += i18n_patterns( url(r'^about/$', 'about.view', name='about'), url(r'^news/', include(news_patterns, namespace='news')), ) @@ -1144,21 +1151,21 @@ Translating URL patterns URL patterns can also be marked translatable using the :func:`~django.utils.translation.ugettext_lazy` function. Example:: - from django.conf.urls import patterns, include, url + from django.conf.urls import include, url from django.conf.urls.i18n import i18n_patterns from django.utils.translation import ugettext_lazy as _ - urlpatterns = patterns('' + urlpatterns = [ url(r'^sitemap\.xml$', 'sitemap.view', name='sitemap_xml'), - ) + ] - news_patterns = patterns('' + news_patterns = [ url(r'^$', 'news.views.index', name='index'), url(_(r'^category/(?P<slug>[\w-]+)/$'), 'news.views.category', name='category'), url(r'^(?P<slug>[\w-]+)/$', 'news.views.details', name='detail'), - ) + ] - urlpatterns += i18n_patterns('', + urlpatterns += i18n_patterns( url(_(r'^about/$'), 'about.view', name='about'), url(_(r'^news/'), include(news_patterns, namespace='news')), ) |