想要将单个变量从视图传递到django中的同一个模板

时间:2014-04-08 06:21:41

标签: jquery python django

我想将视图中的一个变量传递给模板。

但我正在将该模板用于另一个视图

我正在使用该模板进行此视图

def poll(request):
    questions = PollQuestion.objects.all()
    return render(request,'poll/poll.html',{'questions':questions})

我想使用相同的模板

def score(request):
    score1=UserProfile.objects.all()
    print score1
    print type(score1)

    return render(request, 'poll/poll.html',{'score1': score1})

我有model.py

class UserProfile(models.Model):
    user = models.ForeignKey(User) 
    score = models.IntegerField(max_length = 50, blank = True,null = True)

我希望在poll.html中将该分数转换为jquery变量,并希望在修改该分数后再次存储到数据库。

请帮帮我。

4 个答案:

答案 0 :(得分:2)

我认为你认为你有两个问题:

  1. 两个视图功能如何使用一个html模板
  2. 一页不仅可以显示分数,还可以在修改后对数据库进行更改。
  3. 解决第一个问题,你可以尝试:

    {% if score1 %}
        ...
    {% endif %}
    

    questions做同样的事情;将相应的代码放在...

    要解决第二个问题,您可以在views.py中尝试下面的内容:

    if request.METHOD == 'GET':
        ...
        # show score
        ...
    elif reqeust.METHOD == 'POST':
        ...
        # store to database
        ...
    

    如果您希望使用request.METHOD来区别,请对html模板进行一些修改。

答案 1 :(得分:1)

我不确定是什么问题?你知道答案,而你正在这样做。

如果您正在寻找如何传递值并在jquery中使用,那么

您已经解决了将值传递给view的问题。

在javascript中使用

var score1 = {{score1}}

现在你可以在jquery中使用score1作为变量

如何将数据发回服务器

这是步骤, 我假设您正在使用ajax调用将此值传递给服务器.. 注意 - 我给出的例子是在url params中传递它,你可以做formdata或json

 $.ajax({
 url: "urls_to_score_handler?score1=" + score1 , 
}).done(function()
 { alert('job dne'); });

答案 2 :(得分:1)

Personaly,我会选择使用2个html模板,即使它们是相同的。

但是,为了对两个视图使用相同的html模板,请确保从视图传递的词典具有相同的键:在miment它们是不同的,一个有“问题”作为键入项,而另一方有'得分1'。

另一个解决方案是制作模板中的条件:'{%if questions%}''和'{%if score1%}'

答案 3 :(得分:0)

您是否注意到您正在为jQuery分配Queryset? score1=UserProfile.objects.all()返回一个Queryset,甚至不是单个对象,当然也没有jQuery可能理解的json。

即使是单个django对象也不会被jQuery接受,因为它不了解django / python。您需要首先将单个/多个对象转储到json,然后在jQuery中分配它。

对于QuerySet-Serialization,请参阅文档。

我希望我能指出你正确的方向。