在 django 模板变量中将数字连接为字符串
Posted
技术标签:
【中文标题】在 django 模板变量中将数字连接为字符串【英文标题】:concatenate numbers as strings in django template vars 【发布时间】:2012-03-07 09:08:14 【问题描述】:我正在尝试连接两个数字以作为参数传递给包含的模板。
特别是,在下面的代码中,我试图为“divnum”传递一些东西
我看了: How can I concatenate forloop.counter to a string in my django template
并认为下面的代码可以工作,但它仍在添加类似的数字! (例如,我在想要“11”的地方得到“2”)
<div id=" forloop.counter graph" style="display:none; padding: 1em, 0;margin: 1em, 0;">
% with x=forloop.counter|stringformat:"s" %
% include 'graph-div.html' with divnum="1"|stringformat:"s"|add:x question=response.question title="Nationwide" %
% endwith %
</div>
如何将这些数字连接为字符串?
文档中有一条警告说: 可以强制转换为整数的字符串将被求和,而不是连接,就像上面的第一个示例一样。
所以我可以不做吗?似乎如果有警告,那么他们就知道这是一个问题,并且应该在某个地方有解决方案......
【问题讨论】:
这不是问题,这只是python的工作方式,并且鉴于模板过滤器是从左到右解析的,您正在设置一个数字(1),将其转换为字符串(“1”)并将你的 forloop 计数器添加到它,给你一个整数。如果可能(或在视图中完成),模板中的这种复杂逻辑可能更适合模板标签 我想“问题”是指“程序员想做而他们不能做的事情”。我尽量避免在视图中做这样的小事情,因为它增加了复杂性(我认为)一个不好的原因,但听起来我必须这样做,或者找到另一种解决方法。 听起来是模板标签或过滤器的好理由。它还将使将来的内容更易于阅读和维护。您到底想在代码中做什么以及包含的模板中有什么? 我基本上只是想分配不同的 id——所以我有许多“图形”div,每个里面都有两个“图表”div(包含文件的内容) .我有一个函数可以渲染图形并获取要渲染到的 div 的 id。一位同事指出,由于它们只需要不同,我可以使用“a1”而不是“11”,所以这就是我现在正在做的。 您有实际的Chart
对象吗?如果是这样,您可以简单地将它们的主键用作您的 css 的不同 id,因为它们将始终是不同的:<div id="chart- curr_chart.id ">
【参考方案1】:
遵循 Django 的模型-视图-模板 (MVT) 范式,设置数据层以供用户界面显示的逻辑应该在视图层中。我知道这本身不是业务逻辑,但它似乎在视图中处理得更好。根据经验,我确保我的模板几乎没有任何逻辑,除了基于显示的基本决策。由于您正在“...从数据创建图表对象”,因此您还应该在数据对象在视图中创建/组合时生成您的唯一 ID。模板标签也可以帮助您解决问题,但我仍然建议将其放在视图中。在将数据交给模板之前,请在视图中完成所有数据。
【讨论】:
【参考方案2】:在<appname>\templatetags\<appname>_extras.py
中定义您自己的concatenate
模板过滤器
from django import template
register = template.Library()
@register.filter
def concatenate(arg1, arg2):
"""concatenate arg1 & arg2"""
return str(arg1) + str(arg2)
【讨论】:
以上是关于在 django 模板变量中将数字连接为字符串的主要内容,如果未能解决你的问题,请参考以下文章