当前位置: 首页 > 面试题库 >

如何从Django模板中访问包含连字符的字典键?

韩智敏
2023-03-14
问题内容

我们有一个基于自定义数据库的系统,其中许多属性被命名为包含连字符,即:

user-name
phone-number

不能按以下方式在模板中访问这些属性:

{{ user-name }}

Django为此抛出异常。我想避免不得不转换所有键(和子表键)以使用下划线来解决此问题。有更容易的方法吗?


问题答案:

如果您不想重组对象,那么自定义模板标签可能是唯一的选择。对于使用任意字符串键访问字典,此问题的答案提供了一个很好的示例。

对于懒惰的人:

from django import template
register = template.Library()

@register.simple_tag
def dictKeyLookup(the_dict, key):
   # Try to fetch from the dict, and if it's not found return an empty string.
   return the_dict.get(key, '')

您这样使用:

{% dictKeyLookup your_dict_passed_into_context "phone-number" %}

如果要使用任意字符串名称访问对象的属性,则可以使用以下命令:

from django import template
register = template.Library()

@register.simple_tag
def attributeLookup(the_object, attribute_name):
   # Try to fetch from the object, and if it's not found return None.
   return getattr(the_object, attribute_name, None)

您将使用哪种方式:

{% attributeLookup your_object_passed_into_context "phone-number" %}

您甚至可以为子属性提供某种字符串分隔符(例如’__’),但我将其留给作业:-)



 类似资料:
  • 问题内容: 我想打印出每个选择获得的票数。我在模板中有以下代码: 只是一个字典,而只是一个模型对象。 该消息引发异常: 问题答案: 为了回应/扩展Jeff的评论,我认为你应该针对的只是Choice类中的一个属性,该属性计算与该对象关联的投票数: 然后在模板中,你可以执行以下操作: 模板标签,恕我直言,此解决方案有些过分,但这也不是一个糟糕的解决方案。Django中模板的目标是使你与模板中的代码隔离

  • 问题内容: 我正在将字典从我的视图传递到模板。因此可以传入并循环遍历键,值对,但我还没有找到一种从特定键直接在视图中直接访问的优雅解决方案,例如bu json.items [“ key1”]。我可以使用一些if / then语句,但是我宁愿直接这样做也可以吗? 这是html模板中的循环代码: 问题答案: Django模板语言支持按以下方式查找字典键: 请参阅有关变量和查找的模板文档。 模板语言未提

  • 问题内容: 我的字典看起来像这样(字典中的字典): 现在,我只是想在模板上显示信息,但是我很挣扎。我的模板代码如下: 它只是在模板上显示“ 0”? 我也尝试过: 这甚至不显示结果。 我想也许我需要更深入地迭代一个级别,所以尝试了一下: 但这不会显示任何内容。 我究竟做错了什么? 问题答案: 可以说你的数据是- 你可以使用该data.items()方法来获取字典元素。注意,在django模板中,我们

  • 问题内容: 我的视图代码基本上是这样的: 我想在Django模板中执行的操作是: 我想要这样输出: 但是通过变量名称via对dict的引用实际上不起作用。我怀疑它是在内部而不是在做。有什么办法可以解决此问题? 问题答案: 没有内置的方法可以执行此操作,您需要编写一个简单的模板过滤器才能执行此操作:http : //code.djangoproject.com/ticket/3371

  • 问题内容: 我想在Django模板标签中连接一个字符串,例如: 这是我的变量,我想将其与其余路径连接起来。 假设我有并且我想要结果扩展。 问题答案: 用于:

  • 我有一个XML文件,正在使用FreeMarker解析。标记中的一个属性包含“-”,我必须根据该属性的值定义一个条件。代码段如下所示: >