1

だから私はDjangoとJavascript(私はJQueryを使用しています)の両方にかなり慣れていません、そして私がハックをしているのか、それともクライアント側に表示されたデータベースIDをdjangoサーバー側に送信するより巧妙な方法があるのか​​疑問に思っています。これが私のプロセスです:

データベースからレコードを取得するためにAJAXを使用するbProcessingオプションを使用して、データの行を表示しているdataTable(http://datatables.net )があります。私のurls.pyのURLは次のようなものです:

url(r'^assets/activitylog/(?P<cid>.*)$', views.getActivityTable_ajax, name="activitylog_table"),

そして私のdataTableajax関連コードは次のようなものです:

"sAjaxSource": "/assets/activitylog/" + getIDFromHTML(),

ここで、Djangoビューで使用されるjavascript関数getIDFromHTML()は次のようになります。<cid>

function getIDFromHTML(){
    // Simply return the text in the #release_id div element from the HTML
    return $("#release_id").html();
};

これは私には「ハッキー」に見える部分です。テンプレートコードに、データテーブルのURLで使用しているデータベースID(cssにdisplay:noneを使用)を挿入しているので、ビューに戻すことができます。コードがHTML自体に埋め込まれていない限り、javascriptコードでdjangoテンプレートタグを使用することはできないため、これのほとんどが必要になります。

私が見つけた他の唯一のことは、URLを変更して、渡されたパラメーターを削除することです。

url(r'^assets/activitylog', views.getActivityTable_ajax, name="activitylog_table"),

ビューコードを次のように変更します。

def getActivityTable_ajax(request):
    """Returns the activity for a given pid from HTTP GET ajax reqest"""

    pid = int(urlparse.urlparse(request.META['HTTP_REFERER']).path.split('/')[-1])
    # rest of view code here...

必要なIDはこのリファラーURLの最後にあるためです。

このようにして、非表示のデータベースIDをHTMLに埋め込み、ajaxを介してテーブルポピュレーションビューコードに戻す必要はありません。

この方法でリクエストオブジェクトでHTTP_REFERERを使用しても大丈夫ですか?私はこれを完全に間違った方法で行っていますか?

前もって感謝します!

4

2 に答える 2

2

...コードがHTML自体に埋め込まれていない限り、javascriptコードでdjangoテンプレートタグを使用することはできません...

これは正しくありません。タグがurlconf<script>内の何かを指すようにしてから、ビューでJavaScriptに適切にヘッダーを設定して出力します。Content-Type

于 2011-01-17T04:44:12.630 に答える
0

先週、Djangoでいくつかのデータテーブルをセットアップしました。
唯一の要件は、サーバーが行を含むaaDataと呼ばれるJSON構造を送信することです。

この完全な例を基礎として使用することもできます。これはより高度で、プロジェクト(datatables.utils)でcipyする必要のあるいくつかのメソッドがあります:
http ://www.datatables.net/development/server-side/django

于 2011-01-17T08:10:03.510 に答える