所以,在template.html中我使用:
{% if dict %}
{{ s={} }}
{% endif %}
错误是 - 无法解析剩余部分:'= {}'中的'= {}'。如何解决?
答案 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 %}