如何在Django和Javascript之间共享信息?

时间:2011-01-17 04:30:37

标签: django jquery datatables

所以我对Django和Javascript都很陌生(我正在使用JQuery),我想知道我是否正在进行黑客攻击,或者是否有更多灵活的方法将客户端显示的数据库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-relavant代码类似:

"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”的部分。我在我的模板代码中插入了我在datatables 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就在这个引用网址的末尾。

这样我就不必将隐藏的数据库id嵌入到HTML中并通过ajax将其传递给表填充视图代码。

以这种方式在请求对象中使用HTTP_REFERER是否可以?我是以完全错误的方式解决这个问题吗?

提前致谢!

2 个答案:

答案 0 :(得分:2)

  

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

这是不正确的。只需将<script>标记指向urlconf中的某个内容,然后为JavaScript调整视图set the Content-Type header并输出它。

答案 1 :(得分:0)

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

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