summaryrefslogtreecommitdiff
path: root/docs
diff options
context:
space:
mode:
authorMalcolm Tredinnick <malcolm.tredinnick@gmail.com>2007-02-17 05:51:45 +0000
committerMalcolm Tredinnick <malcolm.tredinnick@gmail.com>2007-02-17 05:51:45 +0000
commited3d787edaecdaaece247d7b0f09b9ed6fe3be84 (patch)
treeca29a966d377299fcd66cd00eec3dd66a2103fd5 /docs
parent369d9ffa3d513aa5f8fb847c2025ac305ee23ffe (diff)
Fixed #2568 -- Added documentation for the permalink() decorator. Based on a
patch from Joeboy. git-svn-id: http://code.djangoproject.com/svn/django/trunk@4535 bcc190cf-cafb-0310-a4f2-bffc1f526a37
Diffstat (limited to 'docs')
-rw-r--r--docs/model-api.txt29
1 files changed, 24 insertions, 5 deletions
diff --git a/docs/model-api.txt b/docs/model-api.txt
index 8abd88f7ec..26b7f6659e 100644
--- a/docs/model-api.txt
+++ b/docs/model-api.txt
@@ -1721,11 +1721,30 @@ But this template code is good::
<a href="{{ object.get_absolute_url }}">{{ object.name }}</a>
-(Yes, we know ``get_absolute_url()`` couples URLs to models, which violates the
-DRY principle, because URLs are defined both in a URLconf and in the model.
-This is a rare case in which we've intentionally violated that principle for
-the sake of convenience. With that said, we're working on an even cleaner way
-of specifying URLs in a more DRY fashion.)
+``permalink``
+-------------
+
+** New in Django development version. **
+
+The problem with the way we wrote ``get_absolute_url()`` above is that it
+slightly violates the DRY principle: the URL for this object is defined both
+in the URLConf file and in the model.
+
+You can further decouple your models from the URL configuration using the
+``permalink`` function. This function acts as a decorator and is passed the
+view function and any parameters you would use for accessing this instance
+directly. Django then works out the correct full URL path using the URL
+configuration file. For example::
+
+ from django.db.models import permalink
+
+ def get_absolute_url(self):
+ return ('people.views.details', str(self.id))
+ get_absolute_url = permalink(get_absolute_url)
+
+In this way, you are tying the model's absolute URL to the view that is used
+to display it, without repeating the URL information anywhere. You still use
+the ``get_absolute_url`` method in templates, as before.
Executing custom SQL
--------------------