无法从Django View获取数据到模板中

时间:2016-08-03 17:15:45

标签: python django django-templates

我正在尝试发送一些数据来渲染模板中的表格。数据不是QuerySet或任何东西,它是我从Django Rest Framework端点获得的自定义元组列表。

我有以下观点:

class GetPointsView(FormView):
    form_class = forms.GetPointsForm
    template_name = 'get_points.html'
    success_url = reverse_lazy('get_points')

    def post(self, request, *args, **kwargs):
        form_class = self.get_form_class()
        form = self.get_form(form_class)
        var = request.POST['var_field']
        if form.is_valid():
            # Call another view to get the data, based on 'var'.
            response = MyView().get(request, var)
            # The template never handles this data.
            data = json.loads(response.data)
            # And even this doesn't work...
            # data = [('foo', 'bar'), ('baz', 'guido')]
            return HttpResponseRedirect(
                self.get_success_url(),
                {'mydata': data}
            )
        else:
            return self.form_invalid(form)

以下模板:

{% extends 'base.html' %}
{% load bootstrap3 %}
{% load crispy_forms_tags %}

{% block content %}
    {% crispy form %}

    {% if mydata %}
    <hr>

    <table>
        <tr>
            <th>Col A</th>
            <th>Col B</th>
        </tr>
        {% for cola, colb in mydata %}
        <tr>
            <td>{{ cola }}</td>
            <td>{{ colb }}</td>
        </tr>
        {% endfor %}
    </table>
    {% endif %}
{% endblock %}

{% if mydata %}}似乎永远不会成真。 data = [('foo', 'bar'), ('baz', 'guido')]甚至不起作用的事实表明我在这里遗漏了一些东西。

我是否对数据格式有问题,或者我是如何将其发送到模板的?

使用回答进行编辑

所以,虽然之前我尝试过Django的render快捷方式,但我现在才能让它正常运行。这就解决了我的问题:

return render(self.request,
              self.template_name,
              {'form': form, 'mydata': data})

1 个答案:

答案 0 :(得分:0)

渲染上下文中的键是'mydata',因此您应该使用{% if mydata %}。此外,您还会在该行的末尾添加}