我试图将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
任何人都可以告诉我我的错误吗?
答案 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。