เข้าถึงบริบทแมโครใน Jinja2

ฉันต้องการเข้าถึงตัวแปรในเนมสเปซแมโคร jinja2 ภายในฟังก์ชันบริบท บอกว่ามาโครของฉันดูเหมือนว่า:

{% macro show_var(a) %}
  {{ show_var_context_function("a") }}
{% endmacro %}

และฟังก์ชั่นบริบทของฉันมีลักษณะดังนี้:

@contextfunction
def show_var_context_function(context, var_name_string):
  return context[var_name_string]

ตอนนี้ฉันคิดว่าบริบทควรมีสิทธิ์เข้าถึง a... ควรเก็บไว้ในบริบทที่ฉันคิด แต่โค้ดด้านบนจะเพิ่ม NameError บน a โดยบอกว่าไม่ได้กำหนดไว้ภายในบริบท ฉันสงสัยว่าเป็นเพราะบริบทควรจะเป็นบริบทของเทมเพลตไม่ใช่มาโครใช่ไหม

อย่างไรก็ตาม มีวิธีใดบ้างในการเข้าถึงบริบทของมาโคร?


person Ethan Keller    schedule 27.03.2018    source แหล่งที่มา


คำตอบ (1)


ดูเหมือนว่าคุณกำลังจะเข้าถึงบริบท Jinja ทั่วโลกของคุณจากภายในเนมสเปซมาโคร ในการดำเนินการนี้ คุณต้องนำเข้ามาโครไปยังเทมเพลตแต่ละรายการ "พร้อมบริบท"

{% from "_macros.html" import my_macro with context %}

person Community    schedule 19.02.2019