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

Posted

技术标签:

【中文标题】如何在 Django 和 Javascript 之间共享信息?【英文标题】:How To Share Information Between Django and Javascript? 【发布时间】:2011-06-10 06:00:12 【问题描述】:

所以我对 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() 抓取 &lt;cid&gt; 的地方很简单:

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 在这个引用网址的末尾。

这样我就不必胡思乱想地将隐藏的数据库 ID 嵌入 HTML 并通过 ajax 将其传递回表格填充视图代码。

以这种方式在请求对象中使用HTTP_REFERER可以吗?我是否以完全错误的方式处理这件事?

提前致谢!

【问题讨论】:

【参考方案1】:

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

这是不正确的。只需让 &lt;script&gt; 标记指向您的 urlconf 中的某个内容,然后让视图 set the Content-Type header 适合 JavaScript 并输出。

【讨论】:

【参考方案2】:

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

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

【讨论】:

感谢您的链接。这会很有帮助。

以上是关于如何在 Django 和 Javascript 之间共享信息?的主要内容,如果未能解决你的问题,请参考以下文章

django之JavaScript的简单学习2

如何在 Django 中使用 Javascript 和经过身份验证的用户调用 Django API

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

Django之ajax

Django之组件

django之Ajax