Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django模板中循环的数值_Django_Django Templates - Fatal编程技术网

Django模板中循环的数值

Django模板中循环的数值,django,django-templates,Django,Django Templates,如何在Django模板中为循环编写数值?我是说 for i = 1 to n 您不会将n本身传递给模板,而是将range(n)[包含从0到n-1的整数列表]从视图传递给模板,在后者中,您执行{%fori in therrange%}(如果绝对坚持基于1而不是基于0的索引,则可以在循环体中使用forloop.counter;-)。可以传递 {'n' : range(n) } 到模板,然后执行以下操作 {% for i in n %} ... {% endfor %} 注意,您将获得基于0的行

如何在Django模板中为循环编写数值
?我是说

for i = 1 to n

您不会将
n
本身传递给模板,而是将
range(n)
[包含从0到n-1的整数列表]从视图传递给模板,在后者中,您执行
{%fori in therrange%}
(如果绝对坚持基于1而不是基于0的索引,则可以在循环体中使用
forloop.counter
;-)。

可以传递

{'n' : range(n) }
到模板,然后执行以下操作

{% for i in n %}
...
{% endfor %}
注意,您将获得基于0的行为(0,1,…n-1)

(针对Python3兼容性进行了更新)

不幸的是,这是在Django模板语言中实现的。有很多,但它们似乎有点复杂。我只想在上下文中添加一个变量:

...
render_to_response('foo.html', {..., 'range': range(10), ...}, ...)
...
在模板中:

{% for i in range %}
     ...
{% endfor %}
{% load my_filters %}
{% for i in 15|times %}
    <li>Item</li>
{% endfor %}

以防万一其他人遇到这个问题……我创建了一个模板标记,它允许您创建一个
范围(…)

接受与“范围”内置项相同的参数,并创建包含 “范围”的结果。 语法: {%mkrange[start,]stop[,step]作为上下文\u name%} 例如: {%mkrange 5 10 2作为某些_range%} {i在某些_范围内的百分比%} {{i}}:我想重复的东西\n {%endfor%} 生产: 5:我想重复一下 7:我想重复一下 9:我想重复一下
如果数字来自模型,我发现这是模型的一个很好的补丁:

def iterableQuantity(self):
    return range(self.quantity)

我使用了一种简单的技术,可以很好地处理没有特殊标记和附加上下文的小案例

{% for i in '0123456789'|make_list %}
    {{ forloop.counter }}
{% endfor %}
您应该在模板中使用“”,例如:

in views.py

contexts = {
    'ALL_STORES': Store.objects.all(),
}

return render_to_response('store_list.html', contexts, RequestContext(request, processors=[custom_processor]))
店内列表.html:

<ul>
{% for store in ALL_STORES|slice:":10" %}
    <li class="store_item">{{ store.name }}</li>
{% endfor %}
</ul>
    {所有|存储中存储的百分比|切片:::10”}
  • {{store.name}
  • {%endfor%}

我对这个问题的看法,我认为是最具python风格的。在你的应用程序
模板标签
目录中创建一个
My\u filters.py

@register.filter(name='times') 
def times(number):
    return range(number)
模板中的用法:

{% for i in range %}
     ...
{% endfor %}
{% load my_filters %}
{% for i in 15|times %}
    <li>Item</li>
{% endfor %}
{%load my_filters%}
{15次中i的百分比|乘以%}
  • 项目
  • {%endfor%}
    也许是这样

    {% for i in "x"|rjust:"100" %}
    ...
    {% endfor %}
    

    此方法支持标准
    范围([start,]stop[,step])
    功能的所有功能

    /templatetags/range.py

    from django import template
    
    register = template.Library()
    
    
    @register.filter(name='range')
    def _range(_min, args=None):
        _max, _step = None, None
        if args:
            if not isinstance(args, int):
                _max, _step = map(int, args.split(','))
            else:
                _max = args
        args = filter(None, (_min, _max, _step))
        return range(*args)
    
    用法:

    {% load range %}
    
    <p>stop 5
    {% for value in 5|range %}
    {{ value }}
    {% endfor %}
    </p>
    
    <p>start 5 stop 10
    {% for value in 5|range:10 %}
    {{ value }}
    {% endfor %}
    </p>
    
    <p>start 5 stop 10 step 2
    {% for value in 5|range:"10,2" %}
    {{ value }}
    {% endfor %}
    </p>
    
    {%loadrange%}
    停止5
    {5 |范围%中的值为%1}
    {{value}}
    {%endfor%}
    

    开始5次停止10次 {5 |范围内的值为%10%} {{value}} {%endfor%}

    开始5停止10步骤2 {%表示5 |范围内的值:“10,2”%} {{value}} {%endfor%}

    输出

    <p>stop 5
    0 1 2 3 4
    </p>
    
    <p>start 5 stop 10
    5 6 7 8 9
    </p>
    
    <p>start 5 stop 10 step 2
    5 7 9
    </p>
    
    停止5
    0 1 2 3 4
    

    开始5次停止10次 5 6 7 8 9

    开始5停止10步骤2 5 7 9


    我在这个问题上做了很多努力,我在这里找到了最好的答案: (来自)

    你甚至可以访问idx

    views.py:

    context['loop_times'] = range(1, 8)
    
    html:

    {%for i in-loop_times%}
    {{i}
    {%endfor%}
    
    我只是把这个流行的答案再进一步,使它更加健壮。这允许您指定任何起点,例如0或1。它还使用python的范围功能,其中终点少一个,因此可以直接用于列表长度

    @register.filter(name='range')
    def filter_range(start, end):
      return range(start, end)
    
    然后,在模板中只包含上述模板标记文件,并使用以下内容:

    {% for c in 1|range:6 %}
    {{ c }}
    {% endfor %}
    
    现在,您可以执行1-6,而不仅仅是0-6或硬编码。添加一个步骤需要一个模板标记,这应该涵盖更多用例,因此这是一个进步。

    您可以使用:
    {%with'.\center:i as range%}

    这基本上需要一个
    range
    函数。为此提出了一个Django功能票证(),但以“不会修复”结束,并带有以下注释

    我对这个想法的印象是,它试图在模板中进行编程。如果你有一个需要呈现的选项列表,那么它们应该在视图中计算,而不是在模板中。如果这只是一个值范围,那么就这样吧


    他们有一个很好的观点-模板应该是视图的非常简单的表示形式。您应该在视图中创建有限的必需数据,并在上下文中传递给模板。

    您可以传递:

    {'n':范围(n)}

    使用模板:

    {n%中的i的%n} ...
    {%endfor%}

    对于那些想要简单答案的人,只需要显示一定数量的值,比如说100篇文章中的3篇,只需添加
    {%For post in posts | slice:“3”}
    并正常循环,只会添加3篇文章。

    这显示了1到20个数字:

    {% for i in "x"|rjust:"20"|make_list %}
     {{ forloop.counter }}
    {% endfor %}
    
    这也可以帮助您: (计数\u所有\u滑块\u对象来自视图)


    FWIW,012==12,所以它只会在1和2上循环。{%i在'0123456789'| make_list%}中迭代所有10个,而不是跳过0。非常聪明。但是列表理解呢?有点像黑客,但使用相同的想法x=5,y=[i代表范围(x)]上下文={'iterateover':y}@dave750
    context={'iterateover':范围(x)}
    也可以使用'rjust'
    {%for i in“x”| rjust:“100”}生成任意长度的字符串
    -1支持Alex Pi的代码段,该代码段添加了对变量参数的支持。不确定这是否是OP想要的,但这正是我想要的。=)我认为这是正确的解决方案。执行
    range(1,16)
    以获取从1开始的数字,而不是从0开始的数字。同时在templatetags目录中创建一个空文件init_uuuyy。还可以从django.template导入库将这些行添加到my_filters.py
    的顶部;register=Library()
    @register.filter(name='range')def filter_range(start,end):返回范围(start,end)
    然后用作
    {%fori in 1}范围:6%}{%endfor%}
    。请参阅下面的完整答案……我稍微修改了一下(请原谅格式):
    try:return range(number)除外:return[]
    。那样
    {% for i in range(10) %}
       {{ i }}
    
    {% endfor %}
    
    {% for i in "x"|rjust:"20"|make_list %}
     {{ forloop.counter }}
    {% endfor %}
    
    {% for i in "x"|rjust:count_all_slider_objects %}
      {{ forloop.counter }}
    {% endfor %}
    
      {% with counter=count_all_slider_objects %}
        {% if list_all_slider_objects %}
          {%  for slide in list_all_slider_objects %}
            {{forloop.counter|add:"-1"}}
            {% endfor%}
          {% endif %}
        {% endwith %}
    
    {% for _ in ''|center:13 %}
        {{ forloop.counter }}
    {% endfor %}