Django-ページリダイレクト

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

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

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

def hello(request):
   today = datetime.datetime.now().date()
   daysOfWeek = ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']
   return render(request, "hello.html", {"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の公式ウェブサイトにリダイレクトするために完全なURLを文字列として「redirect」メソッドに渡し、2番目の例(viewArticleビュー)では「redirect」メソッドは、ビュー名とそのパラメーターを引数として受け取ります。

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

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

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

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

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

その名前(ここでは記事)を「redirect」メソッドの引数として使用できます。その後、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")

To

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")

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