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

a6b3iqyw  于 2022-11-18  发布在  Go
关注(0)|答案(8)|浏览(451)

我正在尝试将url参数传递给这样的django模板...

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

这是我的www.example.com文件中的调用行views.py。persistConTemplate.html是我的模板和请求的名称。GET是包含url参数的字典。
在模板中,我尝试使用如下参数之一...

{% for item in (numItems) %}

  item {{item}}

{% endfor %}

numItems是我在请求中发送的url参数之一,如下所示...

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

当我尝试上面的for循环时,我得到了如下输出......
图1图2
我期待并希望看到图像这个词印出12次...
图像1图像2图像3图像4图像5图像6图像7图像8图像9图像10图像11图像12
有谁能告诉我我哪里错了吗?

fgw7neuy

fgw7neuy1#

可以使用add过滤器将字符串强制转换为整型

{% for item in numItems|add:"0" %}

https://docs.djangoproject.com/en/dev/ref/templates/builtins/#add
要将int强制转换为string,只需使用slugify

{{ some_int|slugify }}

编辑:话虽如此,我同意其他人的看法,通常你应该在视图中这样做-只有当替代方案要糟糕得多时才使用这些技巧。

rsaldnfx

rsaldnfx2#

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

# 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 }}

它适用于在视图中无法轻松完成此操作的情况。

ct2axkht

ct2axkht3#

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

{{ value|floatformat:"0" }}

对于精度为2的浮点值

{{ value|floatformat:"2" }}

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

8hhllhi2

8hhllhi24#

是的,这个地方是在视图。
我觉得上面的例子不起作用--你不能迭代整数。

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 %}
bzzcjhmw

bzzcjhmw5#

您应该在视图中添加一些代码来解压缩GET参数并将其转换为所需的值。即使numItems是一个整数,您所显示的语法也不会给予所需的输出。
试试看:

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

4si2a6ki6#

在我的例子中,其中一项是字符串,你不能将字符串与整数进行比较,所以我必须将字符串强制转换为整数,如下所示

{% if questions.correct_answer|add:"0" == answers.id %}
    <span>Correct</span>
{% endif %}
wgmfuz8q

wgmfuz8q7#

你可以这样做:如果使用了“select”标签。

{% if i.0|stringformat:'s' == request.GET.status %} selected {% endif %}
aelbi1ox

aelbi1ox8#

我的解决方案是一种黑客和非常具体的..
在模板中,我想比较一个百分比与0.9,它永远不会达到1,但所有的值都被视为字符串在模板中,并没有办法转换字符串到浮点数。
所以我这样做:

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

如果我要检测某个值超出0.8,我必须做到:

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

这是一个黑客攻击,但在我的情况下就足够了。我希望它能帮助其他人。

相关问题