所以我对 Django 和 Javascript(我正在使用 JQuery)都很陌生,我想知道我是否正在做一个 hack,或者是否有更巧妙的方法将客户端显示的数据库 ID 发送到 django 服务器端。这是我的过程:
我有一个 dataTable ( http://datatables.net ),我通过使用 bProcessing 选项来显示数据行,以使用 AJAX 从数据库中检索记录。我的 urls.py 中的 URL 类似于:
url(r'^assets/activitylog/(?P<cid>.*)$', views.getActivityTable_ajax, name="activitylog_table"),
我的 dataTable ajax 相关代码类似于:
"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();
};
这是对我来说似乎“hacky”的部分。我在我的模板代码中插入了我在数据表 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 可以吗?我是否以完全错误的方式解决这个问题?
提前致谢!