Jinja: bool to string ν•„ν„°κ°€ μž‘λ™ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€

에 λ§Œλ“  2018λ…„ 08μ›” 06일  Β·  14μ½”λ©˜νŠΈ  Β·  좜처: pallets/jinja

μ˜ˆμƒλ˜λŠ” λ™μž‘

bool λ₯Ό string 둜 ν•„ν„°λ§ν•˜λ©΄ 각각의 값이 True λ˜λŠ” False $μ—¬μ•Ό ν•©λ‹ˆλ‹€.

μ‹€μ œ 행동

bool λ₯Ό string 둜 ν•„ν„°λ§ν•˜λ©΄ 항상 False κ°€ λ©λ‹ˆλ‹€.

ν…œν”Œλ¦Ώ μ½”λ“œ

Paste the template code (ideally a minimal example) that causes the issue

'{{6 > 0}}' ==> True
'{{6 > 0|string}}' ==> False
'{{6 > 0|bool}}' ==> True
'{{6 > 0|bool|string}}' ==> False

λ‹Ήμ‹ μ˜ ν™˜κ²½

  • 파이썬 버전: 2.7
  • Jinja 버전: Jinja 버전을 λͺ¨λ₯΄κ² μŒ, Ansible은 2.5.4μž…λ‹ˆλ‹€.

κ°€μž₯ μœ μš©ν•œ λŒ“κΈ€

{{ (some_var|length > 0) | string | lower }}

더 읽기 쉽고 더 λͺ…ν™•ν•΄μ§‘λ‹ˆλ‹€.

λͺ¨λ“  14 λŒ“κΈ€

(6>0)|... λ˜λŠ” true|... λ˜λŠ” false|... 와 같은 λ¦¬ν„°λŸ΄ λΆ€μšΈμ„ μ‹œλ„ν•˜μ‹­μ‹œμ˜€.

예, (6>0)|... κ°€ μž‘λ™ν•©λ‹ˆλ‹€. 이 버그 λ³΄κ³ μ„œκ°€ λ‹«νžŒ μ΄μœ λŠ” λ¬΄μ—‡μž…λ‹ˆκΉŒ?

버그가 μ•„λ‹ˆλΌ λ‹¨μˆœνžˆ μ—°μ‚°μž μš°μ„  μˆœμœ„μ΄κΈ° λ•Œλ¬Έμž…λ‹ˆλ‹€. κ΄„ν˜Έκ°€ μ—†μœΌλ©΄ μ½”λ“œκ°€ 6 > (0|string) 둜 μ‹€ν–‰λ˜κ³  μžˆμ„ κ²ƒμ΄λ―€λ‘œ λΆ„λͺ…νžˆ 말이 λ˜μ§€ μ•Šμ§€λ§Œ 6 > '5'|int 와 같은 λ‹€λ₯Έ μž‘μ—…μ—μ„œλŠ” 맀우 μ˜λ―Έκ°€ μžˆμœΌλ―€λ‘œ μ΄λŠ” λ²„κ·Έλ‚˜ μ˜λ„ν•˜μ§€ μ•Šμ€ λ™μž‘μ΄ μ•„λ‹™λ‹ˆλ‹€.

| κ°€ νŒŒμ΄ν”„λΌμΈ ꡬ뢄 기호λ₯Ό λ‚˜νƒ€λ‚΄λŠ” Unix/Linux μ„Έκ³„μ—μ„œ 온 것은 μ˜ˆμƒμΉ˜ λͺ»ν•œ μΌμž…λ‹ˆλ‹€.

그런 μΊμŠ€νŠΈκ°€ ν•„μš”ν•  λ•Œ λŒ€μ‹  6 > ('5'|int) 이어야 ν•œλ‹€κ³  μƒκ°ν•©λ‹ˆλ‹€.

λ‚˜λŠ” λ™μ˜ν•˜μ§€ μ•ŠμœΌλ©° 이것은 λ˜ν•œ μ—„μ²­λ‚œ λ³€ν™”λ₯Ό μΌμœΌν‚¬ κ²ƒμž…λ‹ˆλ‹€.

μš°λ¦¬λŠ” μ΅œμ†Œν•œ κ²½κ³ λ₯Ό 받을 수 μžˆμŠ΅λ‹ˆκΉŒ?

이에 λŒ€ν•œ μ‹€μ œ μ‚¬μš© μ‚¬λ‘€λŠ” Ansible ν…œν”Œλ¦Ώ Java λΆ€μšΈ μ†μ„±μž…λ‹ˆλ‹€.
isEnabled={{ some_var | length > 0 | string | lower }}
$ isEnabled=True/False isEnabled=true/false λ₯Ό μ›ν•˜κΈ° λ•Œλ¬Έμž…λ‹ˆλ‹€.

그것은 isEnabled={{ ((some_var | length) > 0) | string | lower }} (적어도 λ‚˜μ—κ²ŒλŠ”)둜 더 읽기 μ‰¬μšΈ 것이며 μ˜ˆμƒλŒ€λ‘œ μž‘λ™ν•  것이라고 λ―ΏμŠ΅λ‹ˆλ‹€.

{{ (some_var|length > 0) | string | lower }}

더 읽기 쉽고 더 λͺ…ν™•ν•΄μ§‘λ‹ˆλ‹€.

κΈ€μŽ„, λ‚˜λŠ” μš°λ¦¬κ°€ 그것을 λ‹€λ₯΄κ²Œ μ½λŠ” 것을 μ•Œκ³  JinjaλŠ” ν˜„μž¬ 당신이 μ½λŠ” κ²ƒμ²˜λŸΌ 그것을 읽고 μžˆμŠ΅λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜ μœ„μ˜ μž‘λ™ν•˜μ§€ μ•ŠλŠ” 예제의 μ΅œμ•…μ˜ 뢀뢄은 항상 False 을 μ œκ³΅ν•œλ‹€λŠ” κ²ƒμž…λ‹ˆλ‹€.

λ‚˜λŠ” Python이 그것에 λ§Œμ‘±ν•œλ‹€λŠ” 것을 μ•Œκ³  μžˆμ§€λ§Œ Jinja ν…œν”Œλ¦Ώμ—μ„œ int 와 string > λ₯Ό μ‚¬μš©ν•  λ•Œ κ²½κ³ λ₯Ό λ°œν–‰ν•˜λŠ” 것이 쒋은 생각이라고 μƒκ°ν•˜μ‹­λ‹ˆκΉŒ?

λ˜ν•œ |lenght > 0 λŒ€μ‹  μ‚¬μš©ν•  |is_empty 필터에 λŒ€ν•œ μ˜κ²¬μ„ κ³΅μœ ν•΄ μ£Όμ„Έμš”.

μ•„λ¬΄νŠΌ λΉ λ₯Έ λ‹΅λ³€ κ°μ‚¬ν•©λ‹ˆλ‹€. 쒋은 ν•œ μ£Ό λ˜μ„Έμš”.

Ansible은 이것을 μΆ”κ°€ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 그듀이 Jinja 자체의 일뢀가 μ•„λ‹Œ |bool ν–ˆλ˜ κ²ƒμ²˜λŸΌ.

λ‚˜λŠ” 파이썬이 그것에 λ§Œμ‘±ν•œλ‹€λŠ” 것을 μ•Œκ³  μžˆμ§€λ§Œ Jinja ν…œν”Œλ¦Ώμ—μ„œ int와 string 사이에 >λ₯Ό μ‚¬μš©ν•  λ•Œ κ²½κ³ λ₯Ό λ°œν–‰ν•˜λŠ” 것이 쒋은 생각이라고 μƒκ°ν•©λ‹ˆκΉŒ?

ν…ŒμŠ€νŠΈν•˜μ§€λŠ” μ•Šμ•˜μ§€λ§Œ μ•„λ§ˆλ„ 그런 비ꡐ가 λ‹€μ†Œ μ“Έλͺ¨μ—†λŠ” 결과둜 쑰용히 μ„±κ³΅ν•˜λŠ” λŒ€μ‹  큰 μ†Œλ¦¬λ‘œ μ‹€νŒ¨ν•˜λŠ” Python 3μ—μ„œ μ‹€νŒ¨ν•  κ²ƒμž…λ‹ˆλ‹€. JinjaλŠ” μœ ν˜• 검사λ₯Ό μˆ˜ν–‰ν•˜μ§€ μ•ŠμœΌλ―€λ‘œ 두 개의 ν”Όμ—°μ‚°μžλ₯Ό Python에 μ „λ‹¬ν•©λ‹ˆλ‹€(μ½”λ“œλ₯Ό κ²€μ‚¬ν•˜μ§€ μ•Šμ•˜μœΌλ©° μ•„λ§ˆλ„ operator.gt(a, b) 호좜).

λ°˜κ°‘μŠ΅λ‹ˆλ‹€. κ°μ‚¬ν•©λ‹ˆλ‹€.

이 νŽ˜μ΄μ§€κ°€ 도움이 λ˜μ—ˆλ‚˜μš”?
0 / 5 - 0 λ“±κΈ‰