【问题标题】:How to access an integer key inside a django template if the dict has a same string key?如果dict具有相同的字符串键,如何访问django模板中的整数键?
【发布时间】:2013-07-26 22:26:32
【问题描述】:

假设我有一个这样的字典:

dic = {'1': 'string', 1 :'integer'}

当我将它传递给 django 模板并尝试访问 dic.1 时,它总是返回 'string'

如果我删除密钥'1',则dic.1 返回'integer'

我知道我可以为此使用自定义标签,例如:

from django import template
register = template.Library()
@register.filter
def get_key(value, arg):
    return value.get(arg, None)

然后{{ dic|get_key:1 }} 工作正常。

但是,有没有办法直接访问整数/浮点键而不使用自定义标签?

【问题讨论】:

  • 为什么你有一个 2 键共享相同名称的字典?一开始这是一个非常糟糕的主意。如果我对 dict 的理解正确,那么每次您使用已使用的名称制作密钥时,您都会覆盖密钥中的旧数据
  • @Zamphatta 不,你没有正确理解字典,'1'1 是两个不同的键。
  • 有一个最丑的方法:{% for k, v in dic.items %}{% ifequal k '1' %}{% endifequal %}{% endfor %}。但我真的会避免这种情况。但读到 (stackoverflow.com/questions/2970244/…) 我认为没有比模板标签更好的解决方案了。
  • @Ricola3D 嗯,我想我应该开始使用 jinja-templates,它允许标签内有 dic[1] 语法。
  • 你能解释一下你为什么要这样做吗?这听起来像个坏主意。这样一来,您的代码就更难阅读和维护了。

标签: django django-templates


【解决方案1】:

请参阅the answer 提供的关于整数键与字符串键的字典访问速度比较 主题的问题。 Python (CPython) 总是先尝试找到基于字符串的键,然后再尝试查找任何替代项。

可能有充分的理由将相似的字符串键与整数键混合,但我建议避免这种技术或将整数类型转换为字符串以消除无法直接引用键的情况价值观。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-01-16
    • 2012-06-07
    • 2012-10-02
    • 1970-01-01
    • 2012-01-05
    • 1970-01-01
    • 2021-04-10
    • 2010-12-26
    相关资源
    最近更新 更多