在Django模板中创建字典

时间:2012-10-20 08:54:41

标签: django templates dictionary

所以,在template.html中我使用:

{% if dict %}
{{ s={} }}
{% endif %}

错误是 - 无法解析剩余部分:'= {}'中的'= {}'。如何解决?

5 个答案:

答案 0 :(得分:3)

Django模板不应该用于制作词典,它们应该在您的视图中制作,并且只应在模板中进行基本处理。

这样就是为了严格遵守MVC设计模式。

从这里看:https://docs.djangoproject.com/en/dev/topics/templates/

  

哲学

     

如果您有编程背景,或者您已经使用过   像PHP这样的语言将编程代码直接混合到HTML中,   你要记住,Django模板系统不是   简单地将Python嵌入到HTML中。这是设计:模板   系统旨在表达表达,而不是程序逻辑。

     

Django模板系统提供与其功能类似的标签   一些编程结构 - 布尔测试的if标签,for标签   用于循环等 - 但这些并不是简单地执行   相应的Python代码,模板系统不会执行   任意Python表达式。仅列出了标签,过滤器和语法   默认情况下支持以下(尽管您可以添加自己的   根据需要扩展模板语言。

根据您想要根据某些条件创建dict的内容。您应该重新排列逻辑并在视图中创建dict - 您也可以通过这种方式利用python的所有功能。

如果您更详细地描述它,可能会有大量的解决方法。

答案 1 :(得分:1)

你不能在模板中这样做。这不是模板的用途。您应该在视图或自定义模板标记上执行此逻辑。

答案 2 :(得分:1)

您不能直接将python代码放在​​模板中。但是如果条件允许,您可以将变量设置为特定值。您可以使用with tag

执行此操作
{% with alpha=1 beta=2 %}
    ...
{% endwith %}

答案 3 :(得分:1)

如果你将Jinja2与Django一起使用,你可以这样做。 Jinja2比Django模板库具有更多的功能和性能。在Jinja2中你可以设置这样的字典:

{% set my_dict = { 'my_val_1': 1,'my_val_2': 2, } %}

此外,您可以更新循环内的dict变量。这会跳过范围问题。

答案 4 :(得分:1)

它仍然是谷歌搜索中的第一名,它没有很好的解决方案。 (在我看来)

我的解决方案:

自定义模板标签

from django import template
import ast

register = template.Library()

@register.simple_tag
def create_dict(str_dict):
    return ast.literal_eval(str_dict)

然后在模板中

{% load yout_tag_file %}
{% create_dict "{ 'my_val_1': ['test', 'test', 'test'],'my_val_2': 2, }" as config %}
{% for key, value in config.items %}
   {{key}} - {{value}}
{% endfor %}