mirror of
https://github.com/django/django.git
synced 2025-08-03 18:38:50 +00:00
Fixed #15273 -- Extend RedirectView to allow reversal by name.
Thanks to @DrMeers for the report and @ludwigkraatz for the initial patch.
This commit is contained in:
parent
8365ed08b8
commit
b7bd7087e6
4 changed files with 47 additions and 11 deletions
|
@ -192,22 +192,24 @@ RedirectView
|
|||
|
||||
permanent = False
|
||||
query_string = True
|
||||
pattern_name = 'article-detail'
|
||||
|
||||
def get_redirect_url(self, pk):
|
||||
def get_redirect_url(self, *args, **kwargs):
|
||||
article = get_object_or_404(Article, pk=pk)
|
||||
article.update_counter()
|
||||
return reverse('product_detail', args=(pk,))
|
||||
return super(ArticleCounterRedirectView, self).get_redirect_url(*args, **kwargs)
|
||||
|
||||
**Example urls.py**::
|
||||
|
||||
from django.conf.urls import patterns, url
|
||||
from django.views.generic.base import RedirectView
|
||||
|
||||
from article.views import ArticleCounterRedirectView
|
||||
from article.views import ArticleCounterRedirectView, ArticleDetail
|
||||
|
||||
urlpatterns = patterns('',
|
||||
|
||||
url(r'^(?P<pk>\d+)/$', ArticleCounterRedirectView.as_view(), name='article-counter'),
|
||||
url(r'^counter/(?P<pk>\d+)/$', ArticleCounterRedirectView.as_view(), name='article-counter'),
|
||||
url(r'^details/(?P<pk>\d+)/$', ArticleDetail.as_view(), name='article-detail'),
|
||||
url(r'^go-to-django/$', RedirectView.as_view(url='http://djangoproject.com'), name='go-to-django'),
|
||||
)
|
||||
|
||||
|
@ -218,6 +220,11 @@ RedirectView
|
|||
The URL to redirect to, as a string. Or ``None`` to raise a 410 (Gone)
|
||||
HTTP error.
|
||||
|
||||
.. attribute:: pattern_name
|
||||
|
||||
The name of the URL pattern to redirect to. Reversing will be done
|
||||
using the same args and kwargs as are passed in for this view.
|
||||
|
||||
.. attribute:: permanent
|
||||
|
||||
Whether the redirect should be permanent. The only difference here is
|
||||
|
|
|
@ -688,6 +688,9 @@ Miscellaneous
|
|||
|
||||
url(r'^reset/done/$', 'django.contrib.auth.views.password_reset_complete', name='password_reset_complete')
|
||||
|
||||
* :class:`~django.views.generic.base.RedirectView` now has a `pattern_name`
|
||||
attribute which allows it to choose the target by reversing the URL.
|
||||
|
||||
Features deprecated in 1.6
|
||||
==========================
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue