如何在 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()
抓取 <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 在这个引用网址的末尾。
这样我就不必胡思乱想地将隐藏的数据库 ID 嵌入 HTML 并通过 ajax 将其传递回表格填充视图代码。
以这种方式在请求对象中使用HTTP_REFERER可以吗?我是否以完全错误的方式处理这件事?
提前致谢!
【问题讨论】:
【参考方案1】:...除非代码嵌入到 HTML 本身中,否则不能在 javascript 代码中使用 django 模板标签...
这是不正确的。只需让 <script>
标记指向您的 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 和经过身份验证的用户调用 Django API