0

ブラウザをサイトルートにリダイレクトし、JS通知関数をトリガーするために変数を渡そうとしています...これはすべてDjangoで行われます。

私が今持っているのはこれです:

urls.py:

url(r'^accounts/password/reset/complete/$', views.passwordResetComplete,
    name='password_reset_complete'),

views.py:

def passwordResetComplete(theRequest):
return redirect(home(theRequest, 'Password reset successful'))

def home(theRequest, myMessage=None):
.........
    return render_to_response('new/index.html',
                              {
                             "myTopbar": myTopbar,
                             "isLoggedIn": isLoggedIn,
                             "myMessage": myMessage
                            },
                            context_instance=RequestContext(theRequest)
                         )

このエラーが発生します:

NoReverseMatch: Error importing 'Content-Type: text/html; charset=utf-8.......(gives full HTML of page)

私はいくつかの異なる解決策に取り組んできましたが、必要な方法で何も機能していないようです。私が持っている最も近いものは、ルートにJS関数がある'/?query-string'にリダイレクトして、そのクエリ文字列をチェックし、存在する場合は関数を実行することです。ただし、ユーザーがサイトをナビゲートしている間(100%AJAX)、URLにクエリ文字列が残ります。URLに文字列/長いhrefが含まれないようにしたい。

誰かがこの問題を解決する方法を教えてくれたら本当にありがたいです。

4

2 に答える 2

3

HTTPはステートレスプロトコルです。つまり、すべてのリクエストは完全に一意であり、これまでに行われたことのあるものすべてから分離されています。より簡単に言えば、(HTTPで)URLを使用して「変数を渡す」唯一の方法は、URL自体(/someobject/1/たとえば、1オブジェクトID)またはクエリ文字列(?someobject=1)にURLを追加することです。いずれにせよ、情報はURLに埋め込まれ、URLからその情報を解読し、それを使って何かを行うのはアプリケーション次第です。

「セッション」の概念は、HTTPであるステートレスプロトコルに状態を提供する方法として導入されました。それが機能する方法は、サーバーがクライアントにいくつかの識別可能な情報(通常はセッションIDのみ)を含むCookieを送信することです。次に、クライアントは、リクエストごとにリクエストヘッダーでCookieをサーバーに送り返します。サーバーはCookieを確認し、セッションを検索して、進行中の処理をシームレスに続行します。これは実際の状態ではありませんが、本質的に状態を模倣する機能を提供します。これは、実際にURLにデータを埋め込むことなく、リクエスト間でデータを渡す唯一の方法です。

「パスワードのリセットに成功しました」などのユーザーへのメッセージだけを返す必要がある場合は、Djangoのメッセージフレームワークを使用できます。このフレームワーク自体がメッセージの受け渡しセッションを使用します。クライアントにCookieを設定するため、任意のURLにリダイレクトできます。Cookieはその新しいURLのリクエストとともに返され、DjangoはセッションからのメッセージをそのURLのテンプレートの適切な場所に追加します。

実際にJavaScriptを少し呼び出す必要がある場合は、AJAXを介してリクエストを行う必要があります。応答では、JSONを介して必要なデータを返す(そしてそのデータを好きなように操作する)か、実行するJavascriptを返すこともできます。

于 2012-10-01T14:42:30.317 に答える
0

リダイレクトドキュメントに従って、単にビューにリダイレクトすることはできませんが、URLまたはすでにURLに割り当てられているオブジェクト/ビューにのみリダイレクトできます。したがって、2つのオプションがあります。

a)次のようにビューを直接呼び出します。

return home(theRequest, 'Password reset successful')

b)次のようなURLパターンを追加します。

url(r'^your_patterns/$', views.home, msg='',name='home'),

そうすれば、最初に行ったことを実行できるようになります。

return redirect(views.home,('Password reset successful',))

または私の観点から、さらにきちんと:

return redirect('home',('Password reset successful',))
于 2012-10-01T13:47:14.400 に答える