0

、のようなhtmlページにいくつかのリンクがありますが、現在はそのように処理しています

<p> <a href="/cases/{{case.id}}/case_rate/-">rate down</a>

url.pyエントリがあります:

 (r'^cases/(?P<case_id>\d+)/case_rate/(?P<oper>.)$', 'mysite.cases.views.case_rate'),

次に、ロジックを処理してDBにアクセスするビュー関数があり、これを実行します。

return HttpResponseRedirect(request.META.get('HTTP_REFERER','/'))

これを行うためのより良い方法はありますか?新しい評価を表示するには画面を再描画する必要があるため、これで問題がないことがわかります...

4

2 に答える 2

1

コンテンツを提供するのではなくリダイレ​​クトを返す場合、case_rateをviews.pyに含める必要があるかどうかを尋ねる場合、case_rateは要求を処理して応答を返すため、答えは「はい」です。

ただし、views.pyに重複コードを持つ2つのビュー関数があり、その重複コードを、要求と応答の両方を受け取らない別の関数に因数分解することを選択した状況を考えてみます。それはviews.pyに残すのに公正なゲームでしょうか?もちろん、他の場所に移動するとコードが読みにくくなります。または、他の場所に配置することもできます。それは本当にあなたの味覚に基づいたあなたの呼びかけです。

于 2009-05-23T05:12:57.450 に答える
1

これを処理する一般的な方法は、ajaxリクエストを使用することです。

リンクの代わりに、ビューを呼び出し、dbを更新し、アイテムの新しい評価でjson/xmlオブジェクトを返すjavascriptハンドラーを配置します。次に、別のjavascriptハンドルがその応答を受信し、ページをリロードせずに画面上の評価番号を更新します。

理想的には、プレーンhtml(現在使用しているもの)とajaxバージョンの両方のバージョンを保持します。ajaxは、ページの読み込み後に要素にアタッチできるため、javascriptが利用できない場合でも、作業サイトはあります。

次に、編成に関して、ビューに「ajax」パラメーターを設定できます。ビューはそれに応じてdbを更新する必要があり、それがajax呼び出しの場合は、json / xml応答を返します。それ以外の場合は、新しいページを返します。そうすれば、ロジック(オブジェクトのフェッチ、データベースの更新)を1か所にまとめることができます。

于 2009-05-23T14:02:52.343 に答える