Django RedirectView

Posted 安迪_963

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Django RedirectView相关的知识,希望对你有一定的参考价值。

  RedirectView作用是重定向一个指定,给定的Url.这个给定的Url可能包含有字典风格的字符串,因为关键字(词)会被改变,所以从这个Url中捕获的参数可能也会被修改,例如,Url中的“%”应该写成“%%”这样python才会将其修改成“%”。

  如果指定的Url是None,那么会触发:HttpResponseGone (410)

处理流程:
1.dispatch()
2.http_method_not_allowed()
3.get_redirect_url()

官例:

 

#views.py
from django.shortcuts import get_object_or_404
from django.views.generic.base import RedirectView
from articles.models import Article
class ArticleCounterRedirectView(RedirectView):
permanent = False
query_string = True
pattern_name = ‘article-detail‘
def get_redirect_url(self, *args, **kwargs):
article = get_object_or_404(Article, pk=kwargs[‘pk‘])
article.update_counter()
return super(ArticleCounterRedirectView, self).get_redirect_url(*args, **kwargs)

 

 

 

#urls.py
from django.conf.urls import url
from django.views.generic.base import RedirectView
from article.views import ArticleCounterRedirectView, ArticleDetail
urlpatterns = [
url(r‘^counter/(?P<pk>[0-9]+)/$‘, ArticleCounterRedirectView.as_view(), name=‘article-counter‘),
url(r‘^details/(?P<pk>[0-9]+)/$‘, ArticleDetail.as_view(), name=‘article-detail‘),
url(r‘^go-to-django/$‘, RedirectView.as_view(url=‘https://djangoproject.com‘), name=‘go-to-django‘),
]

 

 


 属性:

1.url:将会重定向到的url,如果是None,会返回410错误。

2.pattern_name:将被重定向的模式名

3.permanent:重定向是否是永久型的,默认是Fasle.它产生的唯一区别是Http状态码的不同;当permanent=True时,状态码为301,permanent=False时,状态码为302.

4.query_string:确定是否将GET查询子句发送到新的位置。默认为False,此时这个查询串被丢弃,如果设置为True,查询串会被加到Url的尾部。

方法:

get_redirect_url(*args, **kwargs)

构造目标Url用来重定向。

  它默认是把url当作开始字符串,并用%将从url中命名组中捕获来的参数扩展到url后面。如果url没有设置,get_redirect_url()会偿试用从Url中捕获的的参数来倒转pattern_name,如果是query_string发送的请求,它也会将这个query_string添加到它产生的url中。

  有些概念还没理解,估计得等以后学得深入些了才行,到时再来修改吧。

以上是关于Django RedirectView的主要内容,如果未能解决你的问题,请参考以下文章

django--favicon.ico

如何在 Django Summernote 中显示编程片段的代码块?

django-基于类的视图

用django实现redirect的几种方法总结

Dfango 函数视图 VS 类 RedirectView。如何让类视图接受参数

如何在Django中自动刷新/重定向视图[重复]