Jinja: λΉ„νŠΈ μ—°μ‚°μž μΆ”κ°€

에 λ§Œλ“  2013λ…„ 07μ›” 10일  Β·  9μ½”λ©˜νŠΈ  Β·  좜처: pallets/jinja

완전성을 μœ„ν•΄ λΉ„νŠΈ μ—°μ‚°μžλ₯Ό ν—ˆμš©ν•΄μ•Ό ν•©λ‹ˆλ‹€. ν˜„μž¬ μ •μˆ˜μ— λŒ€ν•œ μ‹œν”„νŠΈλ₯Ό μˆ˜ν–‰ν•˜λ €λ©΄ λ‹€μŒμ„ μˆ˜ν–‰ν•΄μ•Ό ν•©λ‹ˆλ‹€.

{{ (12).__rshift__(other) }}

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

λΉ„νŠΈ 연산은 ν…œν”Œλ¦Ώμ—μ„œ μ‚¬μš©ν•˜λ©΄ μ•ˆ λ©λ‹ˆλ‹€. ν•„μš”ν•œ 경우 κΈ°λŠ₯을 λ…ΈμΆœν•©λ‹ˆλ‹€.

μ™€μš° 주관적인 μž…μž₯μ΄λ„€μš”.

μ €λŠ” ν™ˆ μ–΄μ‹œμŠ€ν„΄νŠΈμ™€ ν•¨κ»˜ jinjaλ₯Ό μ‚¬μš©ν•˜κ³  RGB 색상을 μ‘°μž‘ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€. {'r': 255, 'g': 255, 'b': 255} 을 0xRRGGBB ν˜•μ‹μœΌλ‘œ λ Œλ”λ§ν•˜κ³  μ‹Άμ§€λ§Œ jinjaμ—λŠ” μ΄λŸ¬ν•œ νŽΈλ¦¬ν•œ κΈ°λŠ₯이 μ—†κΈ° λ•Œλ¬Έμ— 운이 μ—†μŠ΅λ‹ˆλ‹€.

이 문제λ₯Ό ν•΄κ²°ν•˜κΈ° μœ„ν•œ μ œμ•ˆ 사항은 λ¬΄μ—‡μž…λ‹ˆκΉŒ? κΈ°λŠ₯을 κ΅¬ν˜„ν•˜λ©΄ μ‹€μ œλ‘œ μž‘λ™ν•˜μ§€λ§Œ λˆ„κ΅°κ°€κ°€ 0xBBGGRR λ₯Ό μ›ν•˜λ©΄ μ–΄λ–»κ²Œ λ κΉŒμš”? λ Œλ”λ§μ€ μœ μ €κ°€ κ²°μ •ν•˜κ²Œ ν•˜λŠ” 것이 μ§„μžμ˜ λͺ«μ΄ μ•„λ‹κΉŒμš”?
λ‚˜λŠ” 이와 같은 κΈ°λŠ₯이 λ‚¨μš©λ˜μ–΄μ„œλŠ” μ•ˆ λœλ‹€λŠ” 데 λ™μ˜ν•˜μ§€λ§Œ 이에 λŒ€ν•œ μ‚¬μš© 사둀가 μžˆμŠ΅λ‹ˆλ‹€.

이 λŒ“κΈ€μ΄ κ°€ν˜Ήν•˜λ‹€κ³  λŠλΌμ…¨λ‹€λ©΄ μ£„μ†‘ν•©λ‹ˆλ‹€. 이것은 제 μ˜λ„κ°€ μ•„λ‹™λ‹ˆλ‹€. λ‚˜λŠ” μ§„μ •ν•œ μ ˆλ§μ— 직면해 μžˆμŠ΅λ‹ˆλ‹€ :cry:

이λ₯Ό μœ„ν•΄ λΉ„νŠΈ μ—°μ‚°μžκ°€ ν•„μš”ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. λ¬Έμžμ—΄ ν˜•μ‹μ„ μ‚¬μš©ν•˜μ‹­μ‹œμ˜€.

{{ '0x{r:02X}{g:02X}{b:02X}'.format(**color) }}

κ°μ‚¬ν•©λ‹ˆλ‹€, μ‹­μ§„μˆ˜λ‘œ λ‹€μ‹œ λ³€ν™˜ν•˜λŠ” 방법을 μΆ”κ°€ν–ˆμŠ΅λ‹ˆλ‹€

{{ '0x{r:02X}{g:02X}{b:02X}'.format(**color) | int(base=16) }}

format ν•„ν„° λŒ€μ‹  .format λ₯Ό μ‚¬μš©ν•˜λŠ” κ²ƒμœΌλ‘œ λ‚˜νƒ€λ‚¬μŠ΅λ‹ˆλ‹€. jinja ν…œν”Œλ¦Ώμ—μ„œ 무엇이 ν—ˆμš©λ˜κ³  무엇이 ν—ˆμš©λ˜μ§€ μ•ŠλŠ”μ§€ μ•ŒκΈ°κ°€ μ•½κ°„ ν˜Όλž€μŠ€λŸ½μŠ΅λ‹ˆλ‹€. 이 μž‘μ—…μ„ μˆ˜ν–‰ν•˜λŠ” 데 μ„ ν˜Έλ˜λŠ” 방법은 λ¬΄μ—‡μž…λ‹ˆκΉŒ? μ–Έμ œ λ‘˜ 쀑 ν•˜λ‚˜λ₯Ό μ‚¬μš©ν•΄μ•Όν•©λ‹ˆκΉŒ?

Python의 zen 인용: There should be one-- and preferably only one --obvious way to do it.

이런 μ’…λ₯˜μ˜ 토둠을 μœ„ν•΄μ„œλŠ” IRCλ‚˜ 메일링 리슀트λ₯Ό μ‚¬μš©ν•˜μ‹­μ‹œμ˜€.

format ν•„ν„°λ₯Ό μ‚¬μš©ν•˜λŠ” 것도 κ°€λŠ₯ν•©λ‹ˆλ‹€.

{{ '0x%(r)02X%(g)02X%(b)02X'|format(**color) }}

format ν•„ν„° λŠ” 기본적으둜 λͺ¨λ“ˆλ‘œ μ—°μ‚°μžλ₯Ό λž˜ν•‘ν•˜μ—¬ Python의 이전 λ¬Έμžμ—΄ ν˜•μ‹ 지정 λ©”μ»€λ‹ˆμ¦˜ 을 ν™œμ„±ν™”ν•©λ‹ˆλ‹€. λ°˜λ©΄μ— format λ©”μ„œλ“œ λŠ” jinja2μ—μ„œλ„ λ‚˜μ˜€μ§€ μ•Šμ§€λ§Œ Pythonμ—μ„œ str 및 unicode 객체의 λ‚΄μž₯ λ©”μ„œλ“œμ΄λ©° λ‹€μŒμ„ μœ„ν•΄ μ‚¬μš©λ©λ‹ˆλ‹€. μƒˆλ‘œμš΄ λ¬Έμžμ—΄ ν˜•μ‹ν™” λ©”μ»€λ‹ˆμ¦˜ .

Pythonμ—μ„œλŠ” μƒˆ λ©”μ»€λ‹ˆμ¦˜μ΄ 이전 λ©”μ»€λ‹ˆμ¦˜λ³΄λ‹€ μ„ ν˜Έλ˜μ§€λ§Œ jinja2μ—μ„œλŠ” μ•ˆμ •μ μΈ APIλ₯Ό μœ μ§€ν•˜λŠ” 것을 μ’‹μ•„ν•©λ‹ˆλ‹€. 이전 λ²„μ „κ³Όμ˜ ν˜Έν™˜μ„±μ„ μœ„ν•œ 것이 μ•„λ‹ˆλΌλ©΄ format ν•„ν„°λ₯Ό μ œκ±°ν•˜κ±°λ‚˜ λ³€κ²½ν–ˆμ„ 수 μžˆμŠ΅λ‹ˆλ‹€. μ—¬κΈ°μ„œ 무엇을 μ œμ•ˆν•΄μ•Ό 할지 잘 λͺ¨λ₯΄κ² μŠ΅λ‹ˆλ‹€. μ›ν•˜λŠ” 것을 μ‚¬μš©ν•˜μ„Έμš”.

κ·ΈλŸ¬λ‚˜ 예, 이 토둠은 μ£Όμ œμ—μ„œ λ²—μ–΄λ‚˜κ³  있으며, 이것은 μ•„λ§ˆλ„ κ³„μ†ν•˜κΈ°μ— μ μ ˆν•œ μž₯μ†Œκ°€ 아닐 κ²ƒμž…λ‹ˆλ‹€.

λ‚˜λŠ” λ˜ν•œ λΉ„νŠΈ 연산이 ν•„μš”ν•©λ‹ˆλ‹€. 적어도 λΉ„κ΅λŠ” ν•„μš”ν•©λ‹ˆλ‹€. ν•˜λ‚˜μ˜ κ°’μœΌλ‘œ μ—¬λŸ¬ μƒνƒœλ₯Ό λ‚˜νƒ€λ‚΄κΈ° μœ„ν•΄ λΉ„νŠΈλ§ˆμŠ€ν¬ 값을 μ‚¬μš©ν•˜λŠ” HomeAssistant에 μ„Όμ„œκ°€ μžˆμŠ΅λ‹ˆλ‹€. HomeAssistantμ—μ„œ 이 λΉ„νŠΈλ§ˆμŠ€ν¬ 값을 λ‚΄ μ„Όμ„œμ˜ κ°’ ν…œν”Œλ¦ΏμœΌλ‘œ κ°„λ‹¨ν•œ {{ state(sensor.with_bitmaskvalue) & 1 }} 둜 μ‰½κ²Œ μˆ˜ν–‰ν•  수 μžˆλŠ” κ°œλ³„ μ„Όμ„œ κ°’μœΌλ‘œ λΆ„ν• ν•˜κ³  μ‹ΆμŠ΅λ‹ˆλ‹€. 적어도 λ‚΄ 연ꡬ에 λ”°λ₯΄λ©΄ μ§€κΈˆμ€ Jinja ν…œν”Œλ¦Ώμ„ 톡해 이 μž‘μ—…μ„ μˆ˜ν–‰ν•˜λŠ” 것이 거의 λΆˆκ°€λŠ₯ν•©λ‹ˆλ‹€.

state(sensor.with_bitmaskvalue) is bitmask 1 와 같은 μ‚¬μš©μž 지정 ν…ŒμŠ€νŠΈλ₯Ό λ…ΈμΆœν•΄μ•Ό ν•˜λŠ” 것 κ°™μŠ΅λ‹ˆλ‹€.

μ†ŒμŒμ— λŒ€ν•΄ μ£„μ†‘ν•©λ‹ˆλ‹€. 방금 그듀이 λ‚˜λ₯Ό μœ„ν•΄ νŠΈλ¦­μ„ μˆ˜ν–‰ν•˜λŠ” μ‚¬μš©μž μ •μ˜ ν•„ν„° bitwise_and() λ₯Ό μΆ”κ°€ν–ˆμŒμ„ λ°œκ²¬ν–ˆμŠ΅λ‹ˆλ‹€.

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