Smarty ν νλ¦Ώ μμ§μλ λμμ΄λκ° μ¬μ©ν μ μλ λ³μμ λν λΉ λ₯Έ κ°μλ₯Ό μ 곡νλ λ§€μ° νΈλ¦¬ν {debug} κ° λ΄μ₯λμ΄ μμ΅λλ€.
κΈ°λ³Έμ μΌλ‘ Jinja2μ κ°μ λ΄μ©μ΄ μμΌλ©΄ μ’μ κ²μ λλ€.
νμΈν΄μΌνμ§λ§ μ΄κ²μ΄ μλν΄μΌνλ€κ³ μκ°ν©λλ€.
<h2>locals()</h2>
<pre>{{ locals() }}</pre>
<h2>globals()</h2>
https://stackoverflow.com/a/13757358/188833 μ @mitsuhiko :
import jinja2
@jinja2.contextfunction
def get_context(c):
return c
app.jinja_env.globals['context'] = get_context
app.jinja_env.globals['callable'] = callable
λλ²κΉ μ μν΄ μλ₯Ό λ€μ΄, νΌλΌλ―Έλ_debugtoolbarλ 보기 κΈ°λ₯(μ μ νκ² μΆμνλ IMHO)μ΄ μ»¨ν μ€νΈ κ°μ²΄(μ: dict, OrderedDict)λ₯Ό λ°ννλ κ²½μ° ν νλ¦Ώ 컨ν μ€νΈλ₯Ό νμν μ μμ΅λλ€.
μ¬κΈ° λ΄ μ¬μ© μ¬λ‘λ CLI μ νΈλ¦¬ν°μμ jinja2 ν
νλ¦Ώμ ν΅ν΄ λͺ κ°μ§ μΈμλ₯Ό μ λ¬νλ κ²μ
λλ€(μ¬κΈ°μ ν
νλ¦Ώ λ΄μμ κΈ°λ³Έκ°μ μ μνκ³ μΆμ΅λλ€(μ: Dockerfiles(λͺ¨λ κ²μ autoescape
μ μΈ))).
λ΄κ° νκ³ μΆμ κ²μ
{% set ENVVAR=context.get('ENVVAR', 'DEFAULT') %}
κ·Έλ¬λ μμ, μ€μ context
κ°μ²΄λ [...]
@westurner , κ·Έλμ μλν©λκΉ? μ§κΈμ νμΈν μ μμ§λ§ λ³νν μ μλ λ°μ΄νΈκ° ν¬ν¨λ κ²½μ° {{ locals() }}
μ μ€ν¨ν΄μΌ ν©λλ€.
json.dumps(locals())
λ μ¬μ©μ μ μ JSONEncoder μμ΄ μλνμ§ μμ΅λλ€(μ: [code objects,]μ λν΄ repr()
μ¬μ©).pprint.pformat(locals())
? (μ΄κ²μ νΈλ¦¬ν λ΄μ₯μ΄ λ κ²μ
λλ€)autoescape=True
λ XSSλ₯Ό λ°©μ§ν©λλ€.μ΄λ νμ¬ μ±μ ν νλ¦Ώμ νμ₯ν λ μ μ©ν κ²μ λλ€. μ λ νμ¬ μν λ¬Έμ λ₯Ό μ¬μ©νμ¬ μ€νν¬μ€λ₯Ό κΈ°λ°μΌλ‘ νλ μ¬λΌμ΄λ μΌλ₯Ό λ§λ€κ³ λ°λΌμ Jinja2λ₯Ό μ¬μ©νκ³ μμ΅λλ€.
κΈ°λ³Έ μν λ¬Έμ ν λ§λ₯Ό νμ₯νμΌλ©° ν νλ¦Ώμ λ΄κ° μ¬λΌμ΄λμ μλμ§ μ¬λΆλ₯Ό μλ €μ£Όλ μΌλΆ λ³μκ° ν¬ν¨λμ΄ μλμ§ μκ³ μΆμ΅λλ€. λ³μκ° μμ μλ μκ³ μμ μλ μμ΅λλ€. κ·Έλμ νμ¬ μν λ¬Έμ μμ€ μ½λλ₯Ό νκ³ λ€μ΄ νμν κ²μ μ°Ύκ³ μμ΅λλ€.
μ¬μ© κ°λ₯ν λͺ¨λ λ³μλ₯Ό ν νλ¦Ώ λ΄ μμ μ§μ λ€νν μ μμΌλ©΄(μ¦, Python μ½λλ₯Ό μμ νμ§ μκ³ ) ν¨μ¬ λΉ λ₯΄κ³ μ½κ² λ§λ€ μ μμ΅λλ€. λ°λΌμ λ€μκ³Ό κ°μ΄ ν μ μλ κ²μ΄ μ’λ€κ³ κ°μ ν΄ λ³΄κ² μ΅λλ€.
{% extends "!layout.html %}
{# ... or any other sensible name #}
{% dump_variables() %}
{% block body %}
Hello World!
super()
Goodbye World
{% endblock %}
μ΄λ κ² νλ©΄ μ ν λ§λ₯Ό κ°λ°νλ λμ μν λ¬Έμκ° μ 곡νλ λͺ¨λ κ²μ μ±μ°°ν μ μμ΅λλ€.
μ΄ λͺ©μ μ μν΄ νμ₯μ λ§λ€μμ΅λλ€. https://github.com/niwinz/django-jinja/files/1607805/jinja_extensions.py.txt μμ μ°Ύμ μ μμ΅λλ€.
@ShaheedHaque νλ©΄μ΄ μμ΅λκΉ?
νμΌμ μ΄λ©΄ μ£Όμμ μΆλ ₯ μκ° μμ΅λλ€. λ§μ½μ
νμν κ²½μ° μ€λ λ°€ μ§μ λμ°©νλ©΄ μ€μ μ€ν¬λ¦°μ·μ μ 곡ν μ μμ΅λλ€.
2018λ 1μ 6μΌ 02μ 23λΆμ "anatoly techtonik" [email protected] μμ λ€μκ³Ό κ°μ΄ μΌμ΅λλ€.
@ShaheedHaque https://github.com/shaheedhaque νλ©΄μ΄ μμ΅λκΉ?
β
λΉμ μ΄ μΈκΈλμκΈ° λλ¬Έμ μ΄κ²μ λ°λ κ²μ λλ€.
μ΄ μ΄λ©μΌμ μ§μ λ΅μ₯νκ³ GitHubμμ νμΈνμΈμ.
https://github.com/pallets/jinja/issues/174#issuecomment-355716273 λλ μμκ±°
μ€λ λ
https://github.com/notifications/unsubscribe-auth/AEp7KdBBslHJPIGp5VliuF74bxSZTk-wks5tHtkEgaJpZM4AXefd
.
@ShaheedHaque νλ©΄μ 첫 λ²μ§Έ κ²μλ¬Όμ Smarty μΆλ ₯κ³Ό λΉκ΅νλ©΄ μ λ§ μ’μ κ²μ λλ€.
μμ²λλ‘. λ΄μ©μ΄ 컨ν μ€νΈ λ³μ, νν° λ° ν μ€νΈλ³λ‘ ꡬμ±(λ° μ λ ¬)λμ΄ μλ κ²μ λ³Ό μ μμ΅λλ€. λν μ¬κΈ°μ λͺ κ°μ§ "ν₯λ―Έλ‘μ΄" 컨ν μ€νΈ λ³μκ° λ μλ νλλ νλ©΄μ΄ μμ΅λλ€. λ΄κ° μκ°νκΈ°μ κ°μ₯ λ§μ΄ μμ²λ κ²μ μ‘΄μ¬νλ (μ΅μμ) 컨ν μ€νΈ λ³μκ° λ¬΄μμΈμ§ μ νν μλ κ²μ΄λ―λ‘ κΉμ΄κ° 3μΌλ‘ μ νλμ΄ μ½κ°μ μΈλΆ μ¬νμ νμνκΈ°μ μΆ©λΆνμ§ νμΈνμμμ€. λͺ¨λ ꡬ쑰μ μ 체 κΉμ΄:
λν νμλλ λ΄μ©μ μΈλΆ μ¬νμ λ³κ²½/νμ₯νλ κ²μ΄ κ°λ¨νλ€λ κ²μ μκ² λ κ²μ λλ€.
μ μ©ν΄ 보μ λλ€. κ·Έλ λ€λ©΄ PRμ μμ±νμ§ μλ μ΄μ λ 무μμ λκΉ?
λμ μ½λλ² μ΄μ€μμ μ μ½λκ° μμ΄μΌ νλ μμΉμ λν μ§μΉ¨μ΄ μ 곡λλ©΄ κΈ°κΊΌμ΄ κ·Έλ κ² νκ³ μΆμ΅λλ€(μ΄ νλ‘μ νΈμ μ΅μνμ§ μμ).
λλ μλμ§λ§ https://github.com/pallets/jinja/blob/master/jinja2/ext.py μ’μ μμμ²λΌ 보μ λλ€.
PR #798μ μ°Έμ‘°νμμμ€.
2.11μμ μλ‘μ΄ νμ₯μΌλ‘ μ¬μ©ν μ μμ΅λλ€.
κ°μ¬ ν΄μ!
λλ²κ·Έ νμ₯ λ¬Έμλ μλνμ§ μμ κ²μ λν΄ μ¬μ©μμκ² κ²½κ³ ν΄μΌ ν©λλ€.
λ―Όκ°ν μ 보μ 곡κ°
{% debug %}
νκ·Έλ₯Ό ν΅ν΄ νμ₯ νλ‘κ·Έλ¨μ΄
(μ μ λΆμκΈ°κ° λκ΅°κ°κ° μμ΄ λ²λ¦° κ²μ μλ³ ν μ μλλ‘
λ¦΄λ¦¬μ€ μ μ {% debug .* %}
λ₯Ό μ κ±°νμμμ€.
2019λ 10μ 4μΌ κΈμμΌμ David Lord [email protected] μ λ€μκ³Ό κ°μ΄ μΌμ΅λλ€.
νμ #174.
β
λΉμ μ΄ μΈκΈλμκΈ° λλ¬Έμ μ΄κ²μ λ°λ κ²μ λλ€.
μ΄ μ΄λ©μΌμ μ§μ λ΅μ₯νκ±°λ GitHubμμ 보거λ μ€λ λλ₯Ό μμκ±°νμΈμ.
κ°μ₯ μ μ©ν λκΈ
μμ²λλ‘. λ΄μ©μ΄ 컨ν μ€νΈ λ³μ, νν° λ° ν μ€νΈλ³λ‘ ꡬμ±(λ° μ λ ¬)λμ΄ μλ κ²μ λ³Ό μ μμ΅λλ€. λν μ¬κΈ°μ λͺ κ°μ§ "ν₯λ―Έλ‘μ΄" 컨ν μ€νΈ λ³μκ° λ μλ νλλ νλ©΄μ΄ μμ΅λλ€. λ΄κ° μκ°νκΈ°μ κ°μ₯ λ§μ΄ μμ²λ κ²μ μ‘΄μ¬νλ (μ΅μμ) 컨ν μ€νΈ λ³μκ° λ¬΄μμΈμ§ μ νν μλ κ²μ΄λ―λ‘ κΉμ΄κ° 3μΌλ‘ μ νλμ΄ μ½κ°μ μΈλΆ μ¬νμ νμνκΈ°μ μΆ©λΆνμ§ νμΈνμμμ€. λͺ¨λ ꡬ쑰μ μ 체 κΉμ΄:
λν νμλλ λ΄μ©μ μΈλΆ μ¬νμ λ³κ²½/νμ₯νλ κ²μ΄ κ°λ¨νλ€λ κ²μ μκ² λ κ²μ λλ€.