Django 템플릿의 숫자 for 루프
for
Django 템플릿에서 숫자 루프를 작성하려면 어떻게합니까 ? 나는 같은 것을 의미한다
for i = 1 to n
특별한 태그와 추가 컨텍스트가없는 작은 경우에 잘 작동하는 간단한 기술을 사용했습니다. 때때로 이것은 편리합니다
{% for i in '0123456789'|make_list %}
{{ forloop.counter }}
{% endfor %}
불행히도 Django 템플릿 언어 에서는 지원되지 않습니다 . 거기에있는 몇 가지 의 제안 하지만, 조금 복잡한 것 같다. 컨텍스트에 변수를 넣을 것입니다.
...
render_to_response('foo.html', {..., 'range': range(10), ...}, ...)
...
그리고 템플릿에서 :
{% for i in range %}
...
{% endfor %}
{% with ''|center:n as range %}
{% for _ in range %}
{{ forloop.counter }}
{% endfor %}
{% endwith %}
이 문제에 대한 나의 생각은 가장 좋다고 생각합니다. templatetags 디렉토리에 my_filters.py를 유지합니다.
@register.filter(name='times')
def times(number):
return range(number)
그리고 당신은 다음과 같이 사용할 것입니다 :
{% load my_filters %}
{% for i in 15|times %}
<li>Item</li>
{% endfor %}
어쩌면 이렇게?
{% for i in "x"|rjust:"100" %}
...
{% endfor %}
바인딩을 전달할 수 있습니다
{'n' : range(n) }
템플릿으로 이동 한 다음
{% for i in n %}
...
{% endfor %}
0 기반 동작 (0, 1, ... n-1)이 나타납니다.
(Python3 호환성을 위해 업데이트 됨)
n
자신을 전달하지 않고 range(n)
[0에서 n-1까지의 정수 목록 포함] 뷰에서 템플릿으로 전달하고 후자를 사용 {% for i in therange %}
하여 전달합니다 (일반적으로 0이 아닌 1을 기본으로 주장하는 경우) forloop.counter
루프의 본문에서 사용할 수있는 기반 인덱스 ;-).
다른 그냥 넣다 사람이 질문 건너 온다 ... 난 당신을 만들 수있는 템플릿 태그를 만들었습니다 range(...)
: http://www.djangosnippets.org/snippets/1926/
'range'내장과 동일한 인수를 허용하고 다음을 포함하는 목록을 작성합니다. '범위'의 결과. 통사론: context_name %}로 {% mkrange [start,] stop [, step] 예를 들면 다음과 같습니다. {% mkrange 5 10 2 some_range %} {some_range %에서 i의 %} {{i}} : 반복하고 싶은 것 \ n {% endfor %} 생산 : 5 : 반복하고 싶은 것 7 : 반복하고 싶은 것 9 : 반복하고 싶은 것
이 방법은 표준 range([start,] stop[, step])
기능 의 모든 기능을 지원합니다
<app>/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>
산출
<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>
템플릿에서 " slice "를 사용해야 합니다. 예를 들면 다음과 같습니다.
views.py에서
contexts = {
'ALL_STORES': Store.objects.all(),
}
return render_to_response('store_list.html', contexts, RequestContext(request, processors=[custom_processor]))
store_list.html에서 :
<ul>
{% for store in ALL_STORES|slice:":10" %}
<li class="store_item">{{ store.name }}</li>
{% endfor %}
</ul>
나는이 질문에 매우 열심히 노력했고 여기에 가장 좋은 대답을 찾을 수 있습니다 : ( django 템플릿에서 7 번 반복하는 방법에서 )
idx에 액세스 할 수도 있습니다!
views.py :
context['loop_times'] = range(1, 8)
html :
{% for i in loop_times %}
<option value={{ i }}>{{ i }}</option>
{% endfor %}
나는 대중적인 대답을 조금 더 나아가서 더 강력하게 만들고 있습니다. 이를 통해 시작 지점을 지정할 수 있습니다 (예 : 0 또는 1). 또한 끝이 하나 적은 파이썬의 범위 기능을 사용하므로 예를 들어 목록 길이와 함께 직접 사용할 수 있습니다.
@register.filter(name='range')
def filter_range(start, end):
return range(start, end)
그런 다음 템플릿에 위의 템플릿 태그 파일을 포함시키고 다음을 사용하십시오.
{% for c in 1|range:6 %}
{{ c }}
{% endfor %}
이제 0-6 또는 하드 코딩 대신 1-6을 수행 할 수 있습니다. 단계를 추가하려면 템플릿 태그가 필요합니다. 더 많은 사용 사례를 다루므로 앞으로 나아갈 수 있습니다.
당신이 사용할 수있는: {% with ''|center: i as range %}
당신은 전달할 수 있습니다 :
{ 'n': 범위 (n)}
템플릿을 사용하려면
{% in i % n} ... {% endfor %}
이것은 본질적으로 range
기능 이 필요합니다 . 이를 위해 Django 기능 티켓 ( https://code.djangoproject.com/ticket/13088 ) 이 제기 되었지만 다음과 같은 주석으로 "수정되지 않음"으로 마감되었습니다.
이 아이디어에 대한 나의 인상은 그것이 템플릿에서 프로그래밍으로 이어지고 있다는 것입니다. 렌더링해야하는 옵션 목록이있는 경우 템플릿이 아닌보기에서 계산해야합니다. 그것이 값의 범위만큼 간단하다면, 그렇게하십시오.
그것들은 좋은 지적이 있습니다-템플릿은 뷰를 매우 간단하게 표현해야합니다. 뷰에서 제한된 필수 데이터를 작성하고 컨텍스트에서 템플리트로 전달해야합니다.
숫자가 모델에서 나온다면 모델에 멋진 패치라는 것을 알았습니다.
def iterableQuantity(self):
return range(self.quantity)
참고 URL : https://stackoverflow.com/questions/1107737/numeric-for-loop-in-django-templates
'Programing' 카테고리의 다른 글
다차원 배열을 평평하게하는 방법? (0) | 2020.04.13 |
---|---|
NPM의 https 프록시 설정을 지우는 방법은 무엇입니까? (0) | 2020.04.13 |
정수 나누기가 항상 반올림되도록하려면 어떻게해야합니까? (0) | 2020.04.13 |
macOS High Sierra Xcode의 코드 서명 오류-리소스 포크, Finder 정보 또는 이와 유사한 장치는 허용되지 않습니다 (0) | 2020.04.13 |
Java에서 부울 및 부울의 기본값 (0) | 2020.04.13 |