我是Django和jQuery的新手,我无法将我的Django模型中的数据导入到我的jQuery中。
My Django models look like this:
class Exercise(models.Model):
name = models.CharField(max_length=30)
description = models.CharField(max_length=500)
rounds = models.IntegerField()
class Task(models.Model):
Exercise = models.ForeignKey(Exercise)
task = models.CharField(max_length=100)
solution = models.CharField(max_length=100)
description = models.CharField(max_length=500, blank=True)
difficulty_level = models.IntegerField()
我的jQuery:
var tasks = [];
// set up tasks
tasks.push(task("hun kaldes lilletøs","hun kaldes Lilletøs","Ret sætningen nedenfor, så der bliver stavet med store bogstaver efter reglerne.","Help tekst","Feedback tekst","2"));
tasks.push(task("john johnson","John Johnson","Ret sætningen nedenfor, så der bliver stavet med store bogstaver efter reglerne.","Help tekst","Feedback tekst","1"));
tasks.push(task("han hedder bent","han hedder Bent","Ret sætningen nedenfor, så der bliver
function task(text,solution, description, help, feedback, level){
return {
text:text,
solution:solution,
description:description,
help:help,
feedback:feedback,
level:level,
}
}
我首先创建了jQuery,我希望有一种方法可以将Django数据放入jQuery中的数据结构中。我的其余jQuery非常依赖于以这种格式存储数据。
这是我到目前为止所拥有的: 从我的搜索中我发现了两种不同的方法。通过Django的模板语言将数据直接解析到jQuery中或通过ajax加载数据。我不知道哪种方法最有效,以及究竟应该如何做到最好,但出于某些原因,在我看来,使用ajax将是最好的解决方案。
jQuery .load方法似乎不是最合适的,因为它是为直接将数据加载到HTML而构建的。
jQuery .get方法可能能够做到这一点。这是我尝试过的事情:
Views.py
:
def get_tasks(request):
task_list = Task.objects.filter(Exercise_id=1)
return HttpResponse(task_list)
jQuery
:
$.get( "/get_tasks" )
.done(function( data ) {
var test = []
test.push(data);
alert(test)
});
ajax本身有效。检索数据,但它仅显示unicode表示,而不是对象。这可能是因为我应该以不同于HttpResponse的方式返回它,我只是不知道如何做到这一点。
所以问题是,如何从Django视图返回一个jQuery .get调用数组?
编辑:
Here's the code I have so far, it's giving me a 500 error with the jQuery call though
import simplejson
from django.http import HttpResponse
def get_tasks(request):
task_list = Task.objects.filter(Exercise_id=1)
tasklist = dict((x.id, {
'task': x.task,
'solution': x.solution,
}) for x in task_list)
return HttpResponse(simplejson.dumps(dict(isOk=1,tasklist=tasklist)))
答案 0 :(得分:2)
您的观点看起来像这样
import simplejson
def get_tasks(request):
task_list = Task.objects.filter(Exercise_id=1)
tasklist = dict((x.id, {
'field1': x.your_filed_name1,
'field2': x.your_filed_name2,
}) for x in task_list.iterator())
return HttpResponse(simplejson.dumps(dict(isOk=1,tasklist=tasklist)))
你的jQuery看起来像这样
$.get( "/get_tasks" )
.done(function( data ) {
console.log(data.tasklist)
});
答案 1 :(得分:1)
通过Django的模板将数据直接解析到jQuery中 语言或通过AJAX加载数据。我不知道哪种方法 最有效率的
如果从服务器获取的数据取决于页面上的某些用户选择,或者数据量很大,否则您应该使用ajax,否则会减慢页面的加载速度。否则,请使用Django模板将值加载到您的javascript中。
如果您确实需要AJAX,我建议您查看http://www.dajaxproject.com/。这是一个很好的小库,可以简化Django中的AJAX调用。
以下是Dajaxice的外观(添加了从页面传递参数到Django的示例):
应用程序/ ajax.py:
from dajaxice.decorators import dajaxice_register
from django.utils import simplejson
from app.models import Task
@dajaxice_register(method='GET')
def get_tasks(request, exercise_id):
task_list = Task.objects.filter(Exercise_id=exercise_id)
return simplejson.dumps(task_list)
JS:
function get_tasks_callback(data){
console.log(data);
}
var params = {'exercise_id': 1}
Dajaxice.app.get_tasks(get_tasks_callback, params);