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