Skip to content


Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

Removed docs for @permalink decorator.

It's been marked as "not recommended" since 1.6. Anyone still using it
may refer to older versions of the docs.
  • Loading branch information...
commit 4e4c10bc6155d4a0eab117ad4c8afdf53853f5e0 1 parent d5e1a2d
@timgraham timgraham authored
Showing with 0 additions and 87 deletions.
  1. +0 −87 docs/ref/models/instances.txt
87 docs/ref/models/instances.txt
@@ -690,93 +690,6 @@ in ``get_absolute_url()`` and have all your other code call that one place.
are using unicode strings containing characters outside the ASCII range at
-The ``permalink`` decorator
-.. warning::
- The ``permalink`` decorator is no longer recommended. You should use
- :func:`~django.core.urlresolvers.reverse` in the body of your
- ``get_absolute_url`` method instead.
-In early versions of Django, there wasn't an easy way to use URLs defined in
-URLconf file inside :meth:`~django.db.models.Model.get_absolute_url`. That
-meant you would need to define the URL both in URLConf and
-:meth:`~django.db.models.Model.get_absolute_url`. The ``permalink`` decorator
-was added to overcome this DRY principle violation. However, since the
-introduction of :func:`~django.core.urlresolvers.reverse` there is no
-reason to use ``permalink`` any more.
-.. function:: permalink()
-This decorator takes the name of a URL pattern (either a view name or a URL
-pattern name) and a list of position or keyword arguments and uses the URLconf
-patterns to construct the correct, full URL. It returns a string for the
-correct URL, with all parameters substituted in the correct positions.
-The ``permalink`` decorator is a Python-level equivalent to the :ttag:`url`
-template tag and a high-level wrapper for the
-:func:`~django.core.urlresolvers.reverse` function.
-An example should make it clear how to use ``permalink()``. Suppose your URLconf
-contains a line such as::
- (r'^people/([0-9]+)/$', 'people.views.details'),
-...your model could have a :meth:`~django.db.models.Model.get_absolute_url`
-method that looked like this::
- from django.db import models
- @models.permalink
- def get_absolute_url(self):
- return ('people.views.details', [str(])
-Similarly, if you had a URLconf entry that looked like::
- (r'/archive/(?P<year>[0-9]{4})/(?P<month>[0-9]{2})/(?P<day>[0-9]{2})/$', archive_view)
- could reference this using ``permalink()`` as follows::
- @models.permalink
- def get_absolute_url(self):
- return ('archive_view', (), {
- 'year': self.created.year,
- 'month': self.created.strftime('%m'),
- 'day': self.created.strftime('%d')})
-Notice that we specify an empty sequence for the second parameter in this case,
-because we only want to pass keyword parameters, not positional ones.
-In this way, you're associating the model's absolute path with the view that is
-used to display it, without repeating the view's URL information anywhere. You
-can still use the :meth:`~django.db.models.Model.get_absolute_url()` method in
-templates, as before.
-In some cases, such as the use of generic views or the re-use of custom views
-for multiple models, specifying the view function may confuse the reverse URL
-matcher (because multiple patterns point to the same view). For that case,
-Django has :ref:`named URL patterns <naming-url-patterns>`. Using a named URL
-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
-pattern tuple by a call to the ``url`` function)::
- from django.conf.urls import url
- url(r'^people/([0-9]+)/$', 'blog_views.generic_detail', name='people_view'),
-...and then using that name to perform the reverse URL resolution instead
-of the view name::
- from django.db import models
- @models.permalink
- def get_absolute_url(self):
- return ('people_view', [str(])
-More details on named URL patterns are in the :doc:`URL dispatch documentation
Extra instance methods
Please sign in to comment.
Something went wrong with that request. Please try again.