だから私は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を使用しても大丈夫ですか?私はこれを完全に間違った方法で行っていますか?
前もって感謝します!