1

所以我对 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 可以吗?我是否以完全错误的方式解决这个问题?

提前致谢!

4

2 回答 2

2

...除非代码嵌入到 HTML 本身中,否则不能在 javascript 代码中使用 django 模板标签...

这是不正确的。只需让<script>标记指向 urlconf 中的某个内容,然后让视图为 JavaScript设置适当的Content-Type标头并输出它。

于 2011-01-17T04:44:12.630 回答
0

上周我刚刚用 Django 设置了一些数据表。
唯一的要求是您的服务器发送一个名为 aaData 的 JSON 结构,其中包含行。

你也可以使用这个完整的例子作为基础,这是更高级的,并且有一些你必须在你的项目中进行 cipy 的方法(datatables.utils):
http ://www.datatables.net/development/server-side/django

于 2011-01-17T08:10:03.510 回答