2016-01-20 46 views
1

在一个模板中,我试图产生一组类似的元素。 总之,我有一些线类同此:Django模板 - 从字典动态创建变量

{%包括 “一些/ path.html” 与键1 =值键2 =值%}

{%包括“一些/ path.html “与键2 =值3键4 =值4%}

等等...

,并传递给with声明的变量是不同的。没有传递给with语句的其余变量具有在“some/path.html”模板中描述的默认值。

我的想法是将一些字典(或列表)传递给模板,模板会根据字典将参数传递给with语句。 例如,我会有字典:{0: {key1: value1, key2: value2}, 1: {key2: value3, key4: value4}} ,这个字典将会被传递给with声明的参数。

我该如何实现它?或者如果这是不好的解决方案,我能做些什么呢?

我很想得到一些帮助!

回答

0

在模板中,您可以使用'。'将数据存取到字典/对象/ whatether中。

尝试将字典传递到你的背景是这样的观点:

context['my_dict'] = {0: {key1: value1, key2: value2}, 1: {key2: value3, key4: value4}} 

然后你就可以访问它像这样在你的模板:

{% include "some/path.html" with key1=my_dict.0.key1 key2=my_dict.0.key2 %} 

{% include "some/path.html" with key2=my_dict.1.key2 key4=my_dict.1.key4 %} 

希望它会帮助你。

+0

嘿,谢谢你的回答。 我想尽可能避免硬编码。 我可以想象,我将有15包括相同的文件。现在我想介绍新的变量到第16个文件。所以我只需要添加一行keyX = my_dict.16.keyX,我不想在模板文件中添加这个,我想在我的python视图中添加它。 我希望能够做{%include“x.html”{%for k,v in dict.items%} k = v {%endfor%}%},但这不起作用。我希望你能得到我:) – Spinach

0

我挠了挠头,想出了这个! 要发布它,所以它可能会有用。 在/yoursite/templatetags/yourcustomtag.py

from django import template 
import sys 
register = template.Library() 

@register.simple_tag(takes_context=True) 
def yourTag(context): 
    for k, v in your_dict_in_this_context: 
     context[k] = v 
    return 

而且在你的模板调用

{% load yourcustomtag %} 
{% yourTag %} 

,并已加载值从字典到你的背景!好极了!