1

所以,在 template.html 我使用:

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

错误是 -无法解析余数:来自 's={}' 的 '={}'。如何解决?

4

5 回答 5

3

Django 模板不应该真正用于制作字典,它们应该在您的视图中制作,并且只应在模板中完成基本处理。

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

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

哲学

如果您有编程背景,或者如果您习惯于像 PHP 这样将编程代码直接混合到 HTML 中的语言,那么您需要记住,Django 模板系统不仅仅是将 Python 嵌入到 HTML 中。这是设计使然:模板系统旨在表达表示,而不是程序逻辑。

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

从外观上看,您要dict根据某些条件创建一个。您可能应该重新排列逻辑并dict在视图中创建 - 您还可以通过这种方式利用 python 的所有功能。

如果您更详细地描述它,您的情况可能有很多解决方法。

于 2012-10-20T09:05:05.803 回答
2

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

我的解决方案:

自定义模板标签

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 %}
于 2021-04-11T17:38:33.620 回答
1

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

于 2012-10-20T08:58:09.250 回答
1

如果你在 Django 中使用 Jinja2,你可以这样做。Jinja2比 Django 模板库具有更多的功能和性能。在 Jinja2 中,您可以像这样设置 dict:

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

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

于 2018-05-22T04:27:22.173 回答
0

您不能直接将 python 代码放入模板中。但是您可以在 if 条件下将变量设置为某些值。你可以使用with 标签来做到这一点

{% with alpha=1 beta=2 %}
    ...
{% endwith %}
于 2012-10-20T08:59:37.440 回答