如何迭代Django模板中的动态变量

时间:2013-09-10 13:35:43

标签: python django variables dynamic django-templates

有人提出了一些与此有关的问题,但答案对我没有帮助。当我试图在别处(custom templates)建议一个潜在的良好提示时,我没有得到预期的结果。

在我的模板中,我正在从字典中迭代一组键。字典本身源于提交Django formset。

XML模板片段:(我正在渲染为XML文件)

{% for x in range %}
    <file type="{{ form-'x'-type }}" viewpath="{{ form-'x'-file }}"/>
{% endfor %}

以上显然不起作用。迭代有效。 range变量是对应于从视图传递到XML模板的range(int(request.POST['form-TOTAL_FORM']))的python参数。

在模板的每次迭代中,我都需要{{ form-0-type }}{{ form-1-type}}{{ form-2-type }}等。

我该怎么做?如果我真的需要使用自定义过滤器,我该怎么做?

我希望这个问题(以及答案)能帮助许多人解决同样的问题。

感谢。

编辑:(已发布词典)

<QueryDict: 
{
  u'form-MAX_NUM_FORMS': [u'1000'], 
  u'form-INITIAL_FORMS': [u'0'], 
  u'form-TOTAL_FORMS': [u'2'], 
  u'form-0-type': [u'1'], 
  u'form-1-type': [u'2'], 
  u'csrfmiddlewaretoken': [u'LpkjdDcqRCL4VPM0SAuU7efgZjgeubTN']
}>

附加说明: 在第二个视图中,我查找外键的值并将值放在另一个字典中,我将其发送到我的XML模板。

执行此操作的代码片段:

detailed_request = {}
for x in range(0, int(request.POST['form-TOTAL_FORMS'])):
    detailed_request['form-'+str(x)+'-type'] = Upload_Type.objects.get(pk=request.POST['form-'+ str(x)+'-type'])
    detailed_request['form-'+str(x)+'-file'] = request.FILES['form-'+str(x)+'-file']

以上是一个工作片段。当我追踪detailed_request时,我拥有了我需要的所有信息:

{
  'form-1-type': <Upload_Type: malib>,
  'form-0-type': <Upload_Type: axf_file>
}

2 个答案:

答案 0 :(得分:0)

如果有人遇到同样的问题,我实际上改变了我做事的方式。

我没有在模板中迭代formset。相反,我在这里实施了Paolo Bergantino的解决方案: Dynamically adding a form to a Django formset with Ajax

然后在我的观点中,我只需从request.FILES

获取所需的所有数据

我希望这可以帮助任何以相同的错误方法开始的人。

答案 1 :(得分:-1)

您可以通过以下变量访问for循环辅助变量

forloop.counter   The current iteration of the loop (1-indexed)
forloop.counter0  The current iteration of the loop (0-indexed)

更多信息:https://docs.djangoproject.com/en/dev/ref/templates/builtins/#for

所以你要......

{{ form }}-{{ forloop.counter }}-{{ type }}