将数据从Django视图传递到模板

时间:2019-11-23 10:58:30

标签: python django django-views

我有一个非常基本的视图,该视图应该呈现一个页面并将一些数据传递到此页面,这是我的操作方法:

def myview(request):

    request = mydb.objects.filter(user=request.user)

    return render(request,
                  "main/mytemplate.html",
                  context={"data":request})

加载页面时,数据将传递到模板,因此要显示该数据,我只需转到html并添加以下内容即可:

{{data}}

但是我该如何从与呈现页面的视图不同的视图中做同样的事情?

让我们说这是一个我可以通过Ajax请求调用的视图,因此当触发Ajax请求时,该视图应该以相同的方式发送数据,并且我希望能够在Django模板语言中使用它

这里是一个例子:

def secondview(request):
    request = mydb.objects.filter(item='free')
    return HttpResponse(request)

此视图是从Ajax请求中调用的,它将发送带有数据的响应,但是我不想以这种格式或json格式获取数据,而是想从Django模板语言中使用它,就像我对第一个示例所做的那样。有什么办法吗?还是只能在上下文中将数据传递到模板?

2 个答案:

答案 0 :(得分:1)

1)这样做不是在您的HttpResponse中返回secondview

def secondview(request):
    from django.template.loader import render_to_string
    x = 1
    return render_to_string('template_name.jinja', locals())

2)如果要在html中显示该响应,请在html中执行

<div id="x"> </div>

function someFunc(){
     $.ajax({
        url: "someurl",
        type: 'GET',
        success: function (response) {
            document.getElementById("x").innerHtml = response
        },
        error: function (xhr, err) {
            console.log(xhr.responseText);
        },
        cache: false,
        contentType: false,
        processData: false
});

我希望我能回答您的所有问题,如果没有让我知道。

答案 1 :(得分:0)

def myview(request):
    request = mydb.objects.filter(user=request.user)
    context = {"data":request}
    return render(request, "main/mytemplate.html", context)