11

ページxにはボタンがあり、ページzにはリダイレクトされるページyがあります。 ページのzには、記入が必要な書式があります。保存すると、私はページxまたはyにリダイレクトしたいと思います。Django前のページへのリダイレクト

通常、ビューで「リダイレクト」を使用し、リダイレクト先のページを指定します。しかし、このような場合はどうしますか?

アイデア?

ありがとうございます!

答えて

10

GETパラメータを使用して、到着したページをページzから追跡できます。だからあなたがページzに正常に到着したとき、我々はどのページから来たのかを覚えている。ページz上のフォームを処理する際には、以前に保存した情報を使用してリダイレクトします。だから、:

ボタン/ページyの上のリンクは、その値が現在のURLでパラメータ含まれている必要があります

<a href="/page_z/?from={{ request.path|urlencode }}" />go to form</a> 

が続いpage_zのビューでは、テンプレート上にこれを渡すことができます。

def page_z_view(self, request): 
    ... 
    return render_to_response('mytemplate.html', { 'from' : request.GET.get('from', None) }) 

をあなたのフォームテンプレートには:

<form action="{% if from %}?next={{ from }}{% endif %}" /> 
... 

これでフォームはnextフォームが正常に送信された後にどこに戻るかを示すパラメータ。私たちは、これを実行するためにビューをrevistする必要があります。したがって

>>> print(previous_page) 
'http://www.myserver.com/myApp/z' 

:それはのようなものが含まれます

previous_page = request.META['HTTP_REFERER'] 

def page_z_view(self, request): 
    ... 
    if request.method == 'POST': 
     # Do all the form stuff 
     next = request.GET.get('next', None) 
     if next: 
      return redirect(next) 
    return render_to_response('mytemplate.html', { 'from' : request.GET.get('from', None)} 
+0

ので、ページのyの私のボタンは次のようなものでなければなりませんか?何らかの理由でそれが動作していません。 1つは、私のフォームはもはや "次の"私のフォームの下で有効な..保存されませんそして、私は元のウェルカムページにリダイレクトされている..それは間違ったページです。 – JohnnyCash

+1

私は答えを更新しました - 私は余分な/を '

+0

を提出していただきありがとうございます:)あなたの JohnnyCash

-2

ユーザーが訪問したページに関する情報を保存します。後で検索することができます。おそらくこれを行うための最良の場所は、セッション中です。

2

Djangoの要求は、どのようなユーザーがどこから来たページがあることを知っていますあなたはどこから来たのかを知っています(警告、安全でないデータとして扱い、徹底的に検証する、悪意のあるデータを含むことさえあるかもしれません)。あなたはそれがページz.html

return render(request, 'myApp/z.html', data) 

とページzのテンプレートでレンダリング

data = { 
    ..., 
    # also indicate, that saved data are valid and user can leave 
    'previous_page': previous_page, 
} 

としてテンプレートに渡し

まず、あなたはにメタリフレッシュタグを追加します。

{% if form_is_saved and previous_page %}<meta http-equiv="refresh" content="0; url={{ previous_page }}" />{% endif %} 

をこれは利点があり、そのフォームは、それが満たされているページz.html、によって保存されます:それは、フォームを保存し、ページがロードされると、ユーザーは自動的にリダイレクトリダイレクトされることを引き起こしますページxとyでそれを処理する必要はありません(xとyページがDjangoアプリケーションの外にある場合はこれを行う唯一の方法です)。 の

関連する問題