如何将多个视图返回语句传递给Django中的一个模板?

时间:2017-08-28 21:42:18

标签: javascript django python-3.x templates

目前我有一个模板文件,它根据一个Django视图显示一些图形结果,但是,我想在同一个模板中显示另一个函数视图的另一组结果。这些是细节:

第一个功能视图 - 这样可以正常工作,将值发送到第二个功能视图并将结果呈现到模板中。

@api_view(['GET','POST',])
def tickets_results_test(request):
    if request.method == "GET":
        # ...do stuff...
        return render(request, template_name, {'form': form})

    elif request.method == "POST":

        template_name = 'personal_website/tickets_per_day_results.html'
        year = request.POST.get('select_year', None)
        week = request.POST.get('select_week', None)
        receive_send_year_week(year,week)
        ... rest of the code ...

        data = {
        "label_number_days": label_number_days,
        "days_of_data": count_of_days,
        }

        my_data = {'my_data': json.dumps(data)}
        return render(request, template_name, my_data)

第二个功能视图 - 我想将这些结果返回到模板文件中。

def receive_send_year_week(year,week):
    return year, week

模板文件 - 我想显示

下方第二个功能视图的结果您目前正在审核:

{% extends "personal_website/header.html" %}

<script>
   {% block jquery %}

   var days_of_data = data.days_of_data 

   function setChart(){
    ....do stuff to generate graphs...
    ....
    }

 {% endblock %}
</script>

  {% block content %}    

   <div class='row'>
     <p>You are currently reviewing:</p>
   </div>
   <div class="col-sm-10" url-endpoint='{% url "tickets_per_day_results" %}'>
        <div>
            <canvas id="tickets_per_day" width="850" height="600"></canvas>
        </div>
   </div>
 </div>
 {% endblock content %}

如何显示模板内第二个功能视图的结果?我是否需要大量修改第一个视图?

2 个答案:

答案 0 :(得分:1)

  

我想在html中显示这两个值,我想写它们   在html文件中。如果你说我已经拥有它,如何调用它们   它们?

你可以简单地将它放在你的数据字典中,也就是说,如果你提供的代码部分工作,我现在不能测试它,但你会得到它的结果:

template_name = 'personal_website/tickets_per_day_results.html'
year = request.POST.get('select_year', None)
week = request.POST.get('select_week', None)

data = {
  "label_number_days": label_number_days,
  "days_of_data": count_of_days,
  "year": year,
  "week": week,
}

然后在你的模板中:

var year = data.year
var week = data.week

答案 1 :(得分:0)

我想我知道你想做什么,尽管还不清楚,正如其他人指出的那样。

您的视图是api视图,因此您可能不想处理django模板。您应该对此视图进行Ajax调用并替换“渲染”#39;在这种情况下由JsonResponse

另一种方法是做简单的django并使用它的模板。所以你应该摆脱&#39;如果POST GET&#39;您的视图中的装饰器部件(我也没有看到任何POST请求),并且模板中的任何位置都使用{{my_data}}来打印您的数据。要在视图中访问count_of _days define,您可以执行{{my_data.days_of_data}}

这里要做的事情是:

  • django模板使用您通过字典(my_data)发送的数据呈现html。您可以使用模板中的双花括号表示法访问此数据。

  • Django视图可以用作api端点。在这种情况下,您发出Ajax请求,视图应返回一个由Ajax处理的json对象。在视图中没有提及任何模板。

希望它有所帮助!