Django模板:在另一个变量中使用动态模板变量

3

希望这能让你理解...我正在建立一个加密资产列表页面(容易的部分); 但是,在{% for %}循环中,我想在变量内包含另一个变量。展示代码会更有意义:

Tempalte.html

{% for crypto_asset in objects__list_cryptoAssets %}
   <tr role="row" class="body-row">
      <td role="cell">{{ api_external_prices.bitcoin.usd }}</td>
   </tr>
{% endfor %}

所以{% for %}循环抓取所有加密资产,然后我可以使用Django模板{{ asset_class.slug }}来获取所有slug...没有什么特别的。这个变量{{ api_external_prices.bitcoin.usd }}获取比特币的外部美元价格,{{ api_external_prices.bitcoin.eur }}欧元价格,等等...这里也没有什么特别的。
问题在于这里::想法是有类似{{ api_external_prices.{{ asset_class.slug }}.usd }}这样的东西...这样每个加密货币将具有正确获取价格FX。是否可能在一个变量内部有一个变量?
1个回答

1

有几种方法可以实现这个:

模板过滤器

您可以创建一个名为api_external_prices的模板过滤器,它接受asset_class和加密类型作为参数,并返回相应的值。

语法如下,其中api_external_prices是模板过滤器的名称:

{{ asset_class|api_external_prices:"usd" }}

请查看以下链接,了解有关此功能的更多信息:https://docs.djangoproject.com/en/4.0/howto/custom-template-tags/#writing-custom-template-filters

方法

另一种方法是将api_external_prices作为asset_class对象上的一个方法,它返回一个具有usd属性的对象。这里的api_external_prices可以只是调用中央模块/函数的包装器,但这将使在模板中使用它变得更加容易。
{{ asset_class.api_external_prices.usd }}

第一种方法与您所询问的类似,但我个人更喜欢使用第二种方法,因为它可以避免引入模板过滤器。

非常感谢您的回答。我很想更深入地了解第二种方法的实现方式...我会放置剩余的代码以了解您如何处理第二种方法。 - Marcos Benvenuto
嗯,我原以为所有的数据都来自模型,但现在我看到你在视图中获取了一些数据。这将使得应用任何两种解决方案都变得困难。 - Erik Kalkoken
第三种方法是在视图中创建一个数据结构,让您可以在模板中访问所需的所有内容。我会尝试将所有内容映射到一个大的嵌套字典列表中。例如,顶部字典表示加密资产,然后每个字典都有按单位计算的价格字典。 - Erik Kalkoken

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接