ฉันมีเทมเพลต jinja2 (ไฟล์. html) ที่ฉันต้องการแสดงผล (แทนที่โทเค็นด้วยค่าจากไฟล์ py ของฉัน) แทนที่จะส่งผลลัพธ์ที่แสดงผลไปยังเบราว์เซอร์ฉันต้องการเขียนมันลงในไฟล์. html ใหม่ ฉันคิดว่าโซลูชันจะคล้ายกันสำหรับเทมเพลต django
ฉันจะทำเช่นนี้ได้อย่างไร?
ฉันมีเทมเพลต jinja2 (ไฟล์. html) ที่ฉันต้องการแสดงผล (แทนที่โทเค็นด้วยค่าจากไฟล์ py ของฉัน) แทนที่จะส่งผลลัพธ์ที่แสดงผลไปยังเบราว์เซอร์ฉันต้องการเขียนมันลงในไฟล์. html ใหม่ ฉันคิดว่าโซลูชันจะคล้ายกันสำหรับเทมเพลต django
ฉันจะทำเช่นนี้ได้อย่างไร?
คำตอบ:
แล้วเรื่องแบบนี้ล่ะ?
from jinja2 import Environment, FileSystemLoader
env = Environment(loader=FileSystemLoader('templates'))
template = env.get_template('test.html')
output_from_parsed_template = template.render(foo='Hello World!')
print(output_from_parsed_template)
# to save the results
with open("my_new_file.html", "w") as fh:
fh.write(output_from_parsed_template)
test.html
<h1>{{ foo }}</h1>
เอาท์พุท
<h1>Hello World!</h1>
หากคุณใช้เฟรมเวิร์กเช่น Flask คุณสามารถทำได้ที่ด้านล่างของมุมมองของคุณก่อนที่คุณจะกลับมา
output_from_parsed_template = render_template('test.html', foo="Hello World!")
with open("some_new_file.html", "wb") as f:
f.write(output_from_parsed_template)
return output_from_parsed_template
rb
wb
)
ท้ายบรรทัดแรกขาดหายไปในส่วนโค้ดด้านล่าง ฉันพยายามเพิ่ม แต่ SO ต้องการการแก้ไขเพื่อให้มี> 6 ตัวอักษร (ข้อ จำกัด โง่ ๆ ) ..
คุณสามารถถ่ายโอนข้อมูลเทมเพลตไปยังไฟล์ได้ดังนี้:
Template('Hello {{ name }}!').stream(name='foo').dump('hello.html')
อ้างอิง: http://jinja.pocoo.org/docs/dev/api/#jinja2.environment.TemplateStream.dump
หลังจากที่คุณโหลดเทมเพลตแล้วคุณจะเรียกการแสดงผลจากนั้นเขียนผลลัพธ์ลงในไฟล์ คำสั่ง 'with' เป็นตัวจัดการบริบท ภายในการเยื้องคุณมีไฟล์ที่เปิดอยู่เช่นวัตถุที่เรียกว่า 'f'
template = jinja_environment.get_template('CommentCreate.html')
output = template.render(template_values))
with open('my_new_html_file.html', 'w') as f:
f.write(output)