2011-12-23 9 views
2

DataTablesを使用するDjangoアプリを作成しました。問題は、テーブルから行を削除したときに、nginx/gunicornに対して実行してもテーブルに表示されていることです。しかし、私はDjangoテストサーバーに対して実行しているときに正しく動作します。ですから、このコマンドラインでサーバを起動した場合:Django:削除された後も行が表示される - キャッシングのため?

python manage.py runserver 192.168.0.1:8000 

すべて正常に動作します。つまり、行を削除し、表がリフレッシュされ、削除された行は表示されません。

これはHTTP呼び出しの要約である:私が使用した場合の問題は、私が知っている行を含む最初のGETが削除されているようnginxの/ gunicorn秒GETコールが同じリストを返すです

// An initial GET command to populate the table 
GET /myapp/get_list (returns a list to display) 

// I now select a row and delete it which causes this POST to fire 
POST /myapp/delete (deletes a row from the list) 

// After the POST the code automatically follows up with a GET to refresh the table 
GET /myapp/get_list (returns a list to display) 

バックエンドデータベースから取得します。

私はこれは私が最初にGETから取得レスポンスヘッダであるので、それはどちらかのキャッシングの問題だかわからない:

Date Fri, 23 Dec 2011 15:04:16 GMT 
Last-Modified Fri, 23 Dec 2011 15:04:16 GMT 
Server nginx/0.7.65 
Vary Cookie 
Content-Type application/javascript 
Cache-Control max-age=0 
Expires Fri, 23 Dec 2011 15:04:16 GMT 
+0

どのように行を削除しますか?どのようなコマンドを使用して? – Daniel

+0

私はoTable.fnDeleteRow(anSelected)を使用します。クライアントで。私はまた、サーバーにajax経由でPOST要求を送信します(これは動作します)。 – FunLovinCoder

答えて

1

ブラウザにコールをキャッシュしないように、サーバーに追加されたパラメータを送信することによっても問題を解決できます。 jQueryを使用すると簡単に使用できます。

$.ajaxSetup({ cache: false}); 

それ以外の場合は、手動でパラメータを作成する必要があります。通常は、あなたが特定の要求をキャッシュしていないブラウザを伝えるために、Djangoのadd_never_cache_headersやnever_cacheデコレータを使用することができ、タイムスタンプ

var nocache = new Date().getTime(); 
//send nocache as a parameter so that the browser thinks it's a new call 
0

この

oTable.fnDeleteRow(anSelected, null, true); 

とところでのDataTableのバージョン行うにしてみてくださいあなたが使う?

+0

残念ながら、それは役に立たなかった。私はバージョン1.8.1を使用しています。ありがとう。 – FunLovinCoder

0

私は、これを実行した後

POST/myappに/ get_list

GET/myappに/ get_list

を変更することで問題を修正もはやキャッシュされた応答を取得しません。

1

を作成します。ドキュメントはhereです。私はそれがJavaScriptをオフにキャッシュを強制するよりもクリーンなソリューションだと思う。

from django.utils.cache import add_never_cache_headers 

    def your_view(request): 
     (...) 
     add_never_cache_headers(response) 
     return response 

    from django.views.decorators.cache import never_cache 

    @never_cache 
    def your_other_view(request): 
      (...) 
関連する問題