Django-page-redirection

提供:Dev Guides
移動先:案内検索

Django-ページのリダイレクト

Webアプリケーションでは多くの理由でページのリダイレクトが必要です。 特定のアクションが発生した場合、または基本的にエラーが発生した場合に、ユーザーを別のページにリダイレクトできます。 たとえば、ユーザーがWebサイトにログインすると、多くの場合、メインのホームページまたは個人のダッシュボードにリダイレクトされます。 Djangoでは、リダイレクトは「リダイレクト」メソッドを使用して行われます。

'redirect’メソッドは引数として受け取ります:文字列Aビューの名前としてリダイレクトされるURL。

これまでのところ、myapp/viewsは次のようになっています-

def hello(request):
   today = datetime.datetime.now().date()
   daysOfWeek = ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']
   return render(request, "hellol", {"today" : today, "days_of_week" : daysOfWeek})

def viewArticle(request, articleId):
   """ A view that display an article based on his ID"""
   text = "Displaying article Number : %s" %articleId
   return HttpResponse(text)

def viewArticles(request, year, month):
   text = "Displaying articles of : %s/%s"%(year, month)
   return HttpResponse(text)

helloビューを変更してdjangoproject.comにリダイレクトし、viewArticleを内部の '/myapp/articles’にリダイレクトしましょう。 これを行うには、myapp/view.pyが-

from django.shortcuts import render, redirect
from django.http import HttpResponse
import datetime

# Create your views here.
def hello(request):
   today = datetime.datetime.now().date()
   daysOfWeek = ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']
   return redirect("https://www.djangoproject.com")

def viewArticle(request, articleId):
   """ A view that display an article based on his ID"""
   text = "Displaying article Number : %s" %articleId
   return redirect(viewArticles, year = "2045", month = "02")

def viewArticles(request, year, month):
   text = "Displaying articles of : %s/%s"%(year, month)
   return HttpResponse(text)

上記の例では、最初にdjango.shortcutsからリダイレクトをインポートし、Djangoの公式Webサイトにリダイレクトするには、「redirect」メソッドに完全なURLを文字列として渡し、2番目の例(viewArticleビュー)では「redirect」メソッドは、ビュー名とそのパラメーターを引数として受け取ります。

/myapp/helloにアクセスすると、次の画面が表示されます-

Djangoページリダイレクトの例1

/myapp/article/42にアクセスすると、次の画面が表示されます-

Djangoページリダイレクトの例2

permanent = Trueパラメータを追加することにより、「リダイレクト」が一時的か永続的かを指定することもできます。 ユーザーには違いはありませんが、これらはウェブサイトのランキングの際に検索エンジンが考慮する詳細です。

また、URLのマッピング中にurl.pyで定義した「name」パラメータを覚えておいてください-

url(r'^articles/(?P\d{2})/(?P\d{4})/', 'viewArticles', name = 'articles'),

その名前(ここの記事)は、「リダイレクト」メソッドの引数として使用できます。それから、viewArticleのリダイレクトは次のように変更できます-

def viewArticle(request, articleId):
   """ A view that display an article based on his ID"""
   text = "Displaying article Number : %s" %articleId
   return redirect(viewArticles, year = "2045", month = "02")

宛先-

def viewArticle(request, articleId):
   """ A view that display an article based on his ID"""
   text = "Displaying article Number : %s" %articleId
   return redirect(articles, year = "2045", month = "02")

-URLを生成する機能もあります。リダイレクトと同じ方法で使用されます。 'reverse’メソッド(django.core.urlresolvers.reverse)。 この関数はHttpResponseRedirectオブジェクトを返さず、渡された引数でコンパイルされたビューへのURLを含む単純な文字列を返します。