【发布时间】:2016-12-09 13:10:20
【问题描述】:
我正在尝试发送一些数据以在模板中呈现表格。数据不是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})
【问题讨论】:
-
将 {% if data %}} 更改为 {% if mydata %}。
-
不是你的问题的原因,但你不应该覆盖后模型。您唯一要自定义的是在 is_valid 块内;所以把它变成
form_valid()方法。 -
@Aki003,对不起,当我匿名问题时,{%if data %} 是一个错字。删除多余的 } 并没有解决我的问题。
-
@DanielRoseman 谢谢,我的代码突然看起来很干燥。 :)
-
@DanielRoseman 做一件事,只是转储 {{mydata}} 的输出并检查它是否显示任何内容,也许你可以放一个图片链接。我是这样调试的。
标签: python django django-templates