장고 템플릿 (1.4)에서 반복되는 값의 튜플이 있습니다. 값 중 일부는 그냥 인쇄해야하는 문자열이고 다른 것은 문자열을 포함하는 튜플입니다. 문자열을 반복하여 값을 출력해야합니다. 템플리트 내에서, 주어진 값이 마스터 튜플을 반복 할 때 문자열 또는리스트 (튜플)인지 결정할 수있는 방법이 있습니까?값이 문자열 또는 장고 템플릿의 목록인지 어떻게 알 수 있습니까?
답변
이렇게 할 수있는 방법이 없습니다. 사용자 정의 "is_string"필터를 구현하는 것이 다소 좋지 않은 IMHO 해결 방법이지만 뷰의 값을 전처리하여 튜플 (또는 목록)의 균일 한 목록으로 만드는 것이 가장 좋습니다. 템플릿에서
@register.filter
def is_string(val):
return isinstance(val, basestring)
다음 :
<ul>
{% for whatever in something %}
<li>
{% if whatever|is_string %}
{{ whatever }}
{% else %}
<ul>
{{ whatever|unordered_list }}
</ul>
{% endif %}
</li>
{% endfor %}
</ul>
CF 사용자 정의 필터 및 templatetags에 대한 자세한 내용은 우수한 장고 문서 : https://docs.djangoproject.com/en/1.4/howto/custom-template-tags/
이것이 정확히 내가 필요로 한 것입니다. 감사합니다. –
당신이 할 수있는 필터 솔루션
보기 또는 도우미 모듈에isinstance
필터를 만듭니다.
from django.template.defaultfilters import register
@register.filter(name="isinstance")
def isinstance_filter(val, instance_type):
return isinstance(val, eval(instance_type))
그런 다음 템플릿에 당신은 할 수 :
이{% load isinstance %}
{% if some_value|isinstance:"list" %}
// iterate over list
{% else %}
// use string
{% endif %}
여기 '평가'는 비용이 많이 들며, 잠재적 인 보안 문제입니다. 여기서는 코드 검토를 통과하지 않습니다. –
@ brunodesthuilliers : 더 빨라질 수는 있지만 보안 문제는 어떻게됩니까? – Blender
@Blender @Blender는 다음을 시도하십시오 :'{% if some_value | isintance : "os.system ('rm -rf ./')"%}' 물론 당신은 이것을 쓰지 않을 것입니다. 그러나 누군가가 신뢰할 수없는 입력을 'eval' ... 글쎄, 당신이 포인트를 얻은 것 같아. –
- 1. 목록이 문자열인지 또는 문자열 목록인지 어떻게 확인할 수 있습니까?
- 2. NSTextField는 값이 변경되었음을 어떻게 알 수 있습니까?
- 3. 어떻게 장고 템플릿의 사전 필드에 동적으로 액세스 할 수 있습니까?
- 4. 장고 템플릿의 표현식을 평가할 수 있습니까?
- 5. 장고 템플릿의 인덱스 메소드
- 6. 재생 목록이 C#의 음악 재생 목록인지 어떻게 알 수 있습니까?
- 7. Perl 변수에 어떤 유형의 값이 있는지 어떻게 알 수 있습니까?
- 8. 템플릿의 장고 양식 필드 오류
- 9. 장고 인라인, 편집 된 내용을 어떻게 알 수 있습니까?
- 10. 값이 C로 된 배열에 있는지 어떻게 알 수 있습니까?
- 11. jsp 필드 값이 Struts2에서 변경되었는지 여부를 어떻게 알 수 있습니까?
- 12. 런타임시 enum 값이 사용되는지 어떻게 알 수 있습니까?
- 13. 어떻게 문자열 값이 TEntity
- 14. 장고 템플릿의 허가 확인
- 15. 어떻게 알 수 있습니까?
- 16. django 템플릿의 subscripting 문자열
- 17. 장고 fcgi가 왜 죽을까요? 어떻게 알 수 있습니까?
- 18. 배열의 값이 문자열에있는 횟수를 어떻게 알 수 있습니까?
- 19. 개체의 값이 float인지 int인지 어떻게 알 수 있습니까?
- 20. 장고 템플릿의 목록에서 다른 값만 어떻게 표시합니까?
- 21. 템플릿의 장고 외래 키
- 22. PreparedStatement가 어떻게 보이는지 어떻게 알 수 있습니까?
- 23. 템플릿의 조건에서 장고
- 24. 어떻게 출력 값이 문자열 복귀
- 25. 장고 템플릿의 오브젝트 계산하기
- 26. 항목이 얼랑의 문자열인지 목록인지 판단
- 27. 장고 템플릿에서 부울을 인쇄하는 방법을 어떻게 바꿀 수 있습니까?
- 28. 루비에서 문자열 입력이 대문자인지 소문자인지 어떻게 알 수 있습니까?
- 29. 파이썬 : 문자열 목록을 통해 재귀 - 어떻게 차이점을 알 수 있습니까?
- 30. 장고 : 템플릿의 동적 URL 별칭
'isinstance (발, 목록) 경우 ... 다른 ...'TimmyO'Mahony @ –
작동해야하지 장고 템플릿 –
내부 @ TimmyO'Mahony : 또한베이스 스트링에 대해 테스트하는 것이 좋습니다. 대개 문자열이나 다른 종류의 시퀀스인지 여부를 알고 싶은 문제에 해당합니다. –