需要在django模板中将字符串转换为int

时间:2011-01-28 17:38:07

标签: django django-templates


我试图将url参数传递给像这样的django模板......

response = render_to_string('persistConTemplate.html', request.GET)

这是我的views.py文件中的调用行。 persistConTemplate.html是我的模板和request.GET的名称是包含url参数的字典。

在模板中,我尝试使用其中一个参数......

{% for item in (numItems) %}

  item {{item}}

{% endfor %}

numItems是我在请求中发送的url参数之一,就像这样......

http:/someDomain/persistentConTest.html/?numItems=12

当我尝试上面的for循环时,我得到一个像这样的输出....

  

图片1图片2

我期待并希望看到图像字样打印12次......

  

image 1 image 2 image 3 image 4 image 5 image 6 image 7 image 8 image 9 image 10 image 11 image 12

任何人都可以告诉我我的错误吗?

6 个答案:

答案 0 :(得分:108)

你可以使用add filter

将str强制转换为int
{% for item in numItems|add:"0" %}

https://docs.djangoproject.com/en/dev/ref/templates/builtins/#add

强制int to str只使用slugify

{{ some_int|slugify }}
编辑:那就是说,我同意其他人通常你应该在视图中这样做 - 只有当替代方案更糟糕时才使用这些技巧。

答案 1 :(得分:20)

我喜欢制作自定义过滤器:

# templatetags/tag_library.py

from django import template

register = template.Library()

@register.filter()
def to_int(value):
    return int(value)

用法:

{% load tag_library %}
{{ value|to_int }}

适用于无法轻易完成的情况。

答案 2 :(得分:9)

是的,这个地方在视图中。

我觉得上面的例子不起作用 - 你不能迭代一个整数。

numItems = request.GET.get('numItems')

if numItems:
   numItems = range(1, int(numItems)+1)

return direct_to_template(request, "mytemplate.html", {'numItems': numItems})


{% for item in numItems %}
 {{ item }}
{% endfor %}

答案 3 :(得分:3)

您应该在视图中添加一些代码来解压缩GET参数并将它们转换为您想要的值。即使numItems是一个整数,您显示的语法也不会为您提供所需的输出。

试试这个:

ctx = dict(request.GET)
ctx['numItems'] = int(ctx['numItems'])
response = render_to_string('persistConTemplate.html', ctx)

答案 4 :(得分:0)

我的解决方案是一种黑客攻击,非常具体......

在模板中,我想将百分比与0.9进行比较,但它永远不会达到1,但所有值都被视为模板中的字符串,无法将字符串转换为浮点数。

所以我这样做了:

{% if "0.9" in value %}
...
{% else %}
...
{% endif %}

如果我想检测某些值超过0.8,我必须这样做:

{% if ("0.9" in value) or ("0.8" in value) %}
...
{% else %}
...
{% endif %}

这是一个黑客,但在我的情况下就足够了。我希望它可以帮助别人。

答案 5 :(得分:0)

最简单的方法是使用内置的 floatformat 过滤器。

For Integer

{{ value|floatformat:"0" }}

对于具有2精度的浮点值

{{ value|floatformat:"2" }}

它也将舍入到最接近的值。有关详细信息,请查看https://docs.djangoproject.com/en/1.10/ref/templates/builtins/#floatformat