所以,在 template.html 我使用:
{% if dict %}
{{ s={} }}
{% endif %}
错误是 -无法解析余数:来自 's={}' 的 '={}'。如何解决?
所以,在 template.html 我使用:
{% if dict %}
{{ s={} }}
{% endif %}
错误是 -无法解析余数:来自 's={}' 的 '={}'。如何解决?
Django 模板不应该真正用于制作字典,它们应该在您的视图中制作,并且只应在模板中完成基本处理。
这样做是为了严格遵守 MVC 设计模式。
从这里查看:https ://docs.djangoproject.com/en/dev/topics/templates/
哲学
如果您有编程背景,或者如果您习惯于像 PHP 这样将编程代码直接混合到 HTML 中的语言,那么您需要记住,Django 模板系统不仅仅是将 Python 嵌入到 HTML 中。这是设计使然:模板系统旨在表达表示,而不是程序逻辑。
Django 模板系统提供了功能类似于某些编程结构的标签——用于布尔测试的 if 标记、用于循环的 for 标记等——但这些不是简单地作为相应的 Python 代码执行,模板系统不会任意执行Python 表达式。默认情况下仅支持下面列出的标签、过滤器和语法(尽管您可以根据需要将自己的扩展添加到模板语言)。
从外观上看,您要dict
根据某些条件创建一个。您可能应该重新排列逻辑并dict
在视图中创建 - 您还可以通过这种方式利用 python 的所有功能。
如果您更详细地描述它,您的情况可能有很多解决方法。
它仍然是谷歌搜索的第一名,并且没有很好的解决方案。(在我看来)
我的解决方案:
自定义模板标签
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 %}
你不能在模板中这样做。这不是模板的用途。您应该改为在视图或自定义模板标签上执行此逻辑。
如果你在 Django 中使用 Jinja2,你可以这样做。Jinja2比 Django 模板库具有更多的功能和性能。在 Jinja2 中,您可以像这样设置 dict:
{% set my_dict = { 'my_val_1': 1,'my_val_2': 2, } %}
此外,您可以更新循环内的 dict 变量。这将跳过范围问题。
您不能直接将 python 代码放入模板中。但是您可以在 if 条件下将变量设置为某些值。你可以使用with 标签来做到这一点
{% with alpha=1 beta=2 %}
...
{% endwith %}