2016-06-16 27 views
4

私はpythonを使用しています。匿名ユーザーがサインインページに行くと私のページで、バックエンドに変数を渡して、ユーザーがどこから来ているかを示しますURL)。Flaskにwindow.locationを渡します。url_for

ユーザーがこのアンカーリンクをクリックしたときにそう:

<a href="{{ url_for('account.signin') }}">Sign in</a> 

私は、ユーザーが現在いる場所のページの現在のURLを送りたいです。

<script> 
var current_url = window.location.href; 
<script> 

私はこのようにそれを送信するために考えた:

<a href="{{ url_for('account.signin', current_url="window.location.href") }}">Sign in</a> 

しかし、私はなurl_for内のJavaScriptコードを使用することはできませんか、どのように私はそれを渡すことができますか?

+1

をuがフラスコやDjangoのフレームワークを使用していますか? –

+0

私はFlaskを使用しています – Babel

答えて

3

あなたがDjangoを使用していると仮定します。

from django.http import HttpResponseRedirect 

def foo(request, *a, **kw): 
    # sign in user 
    return HttpResponseRedirect(request.META.get('HTTP_REFERER')) 

またはjQueryを使って:

がリンクにIDを追加

あなたのビューでは、ユーザーからすることができ、前の場所を返すことができます。

次に、次のパラメータを追加してブラウザを新しいURLにリダイレクトします。テンプレートのレンダリング中

def foo(request, *a, **kw): 
    next_url = request.GET["next"] 
+0

あなたの答えをありがとう、私は私のURLはこのhttp://0.0.0.0:5000/account/signin?next = window.location.href' so windowのように見えます。 location.hrefコードは現在のURLを取得していません。文字列のように動作していますか? – Babel

+0

なぜこれが起こったのですか、助けてください? – Babel

+0

はURLなので私はそれが '{{url_for( 'account.signin')}}?next = {{url_for( 'current'}}}'のようになると思うし、もちろん 'url_for( 'current')'は現在のルートを返すべきだと思う。 – Sugar

4

使用request.pathパスを取得する:あなたがそうのようなその次の変数にアクセスすることができ、あなたのビューでurl/for/signin?next=prev/location

$("#signin").click(function(e){ 
    e.preventDefault() 
    window.location = $(this).href + "?next=" + window.location.href; 
} 

のようなものを作る必要があります。

私はそれがフラスコのドキュメントから引用し、すべてのリクエストヘッダを持つ headers辞書を提供しないので、あなたは、その最高の状態で requestオブジェクトを使用すべきだと思う
<a href="{{ url_for('account.signin') }}?next={{ request.path }}">Sign in</a> 
+0

あなたの答えに感謝します。これは非常に興味深い方法です!私はいくつかの文書をそこに文書名に基づいて新しいURLを生成しているし、URLをベースURLから特定のURLにページをリフレッシュせずに変更します。これらの関数の場合、この関数は、リフレッシュされるベースURLまたは最後のURLをとります。これを修正する方法はありますか?javascriptのタイムアウトのようですか? – Babel

+0

あなたのページには、その場でURLを変更するいくつかのJavaScriptコードがあるようです。 marcusshepの答えで提供されているjavascriptコードを使用することができます。 – flowfree

1

headers

入ってきますオブジェクトのような辞書としてのリクエストヘッダ。今

、ヘッダ要素の一つであるHTTP_Refererある:

HTTPのリファラ(リファラ1の本来スペルミス)がウェブページのアドレスを識別するHTTP ヘッダフィールドであります(すなわち、URI またはIRI)が、要求されているリソースにリンクしています。 リファラーを確認すると、新しいWebページでリクエストの発信元を確認できます。

あなたが任意の辞書項目へのアクセスと同じように最後に、あなたはflaskからアクセスすることができます

>>> print('Referer is {}'.format(request.headers.get('Referer'))) 
関連する問題