আমি কীভাবে ব্রাউজারের পরিবর্তে পাইথনের কোনও ফাইলকে জিনজা 2 আউটপুট রেন্ডার করব


87

আমার কাছে একটি জিনজা 2 টেমপ্লেট (.html ফাইল) রয়েছে যা আমি রেন্ডার করতে চাই (আমার পাই ফাইলের মানগুলি দিয়ে টোকেনগুলি প্রতিস্থাপন করুন)। ব্রাউজারে রেন্ডার করা ফলাফল প্রেরণের পরিবর্তে, আমি এটি একটি নতুন .html ফাইলে লিখতে চাই। আমি ধারণা করব যে সমাধানটিও জাঙ্গো টেমপ্লেটের জন্য একই রকম হবে।

কিভাবে আমি এটি করতে পারব?

উত্তর:


130

কিভাবে ভালো কিছু সম্পর্কে?

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)

পরীক্ষা। html

<h1>{{ foo }}</h1>

আউটপুট

<h1>Hello World!</h1>

আপনি যদি ফ্লাস্কের মতো কোনও কাঠামো ব্যবহার করেন তবে আপনি ফিরে আসার আগে আপনি নিজের দেখার নীচে এটি করতে পারেন।

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

দ্রুত প্রতিক্রিয়া জন্য আপনাকে ধন্যবাদ। যদি আমি সঠিকভাবে বুঝতে পারি, তবে আপনার প্রথম স্নিপিট থেকে: জিনজা 2 আমদানি পরিবেশ থেকে, ফাইলসিস্টেমলোডার এনভি = পরিবেশ (লোডার = ফাইলসিস্টেমলডার ('টেমপ্লেট')) টেমপ্লেট = env.get_template ('test.html') আউটপুট_ফর্ম_পারসড_টেম্পলেট = টেম্পলেট.রেন্ডার (ফু = 'হ্যালো ওয়ার্ল্ড!') মুদ্রণ আউটপুট_ফ্রমে_ পার্সড_টেম্পলেট আমি প্রিন্ট লাইনটি কোনও ধরণের ফাইল রাইনের সাথে প্রতিস্থাপন করতে পারি। এটা কি ঠিক? একটি ফাইল লিখতে যেমন একটি লাইন দেখতে কেমন হতে পারে? রে ফ্লাস্ক, এটি একটি বৃহত্তর অ্যাপ্লিকেশনটির একটি ছোট অংশ, তাই আমি জানিনা যে আমি কোনও কাঠামো ব্যবহার করতে সক্ষম হব কিনা।
বিল জি।

স্পষ্টির জন্য ধন্যবাদ। অবশেষে এটি চেষ্টা করার সুযোগ পেলাম। প্রাথমিকভাবে আমি একটি ত্রুটি পেয়েছি "এই জাতীয় কোনও ফাইল বা ডিরেক্টরি নেই: 'my_new_file.html'"। স্পষ্টতই ফাইলটি ইতিমধ্যে বিদ্যমান রয়েছে। আমি তখন টেমপ্লেট ফাইলটি অনুলিপি করে এটিকে 'my_new_file.html' নামকরণ করেছি। এখন আমি একটি ত্রুটি পেয়েছি: আইওআরর: ফাইল লেখার জন্য খোলা নেই। আমি গুগল অ্যাপ ইঞ্জিনে বিকাশ করছিলাম বলেই এটি হতে পারে?
বিল জি।

@ বিলগ। না, এটি আমার পক্ষে একটি ত্রুটি ছিল। উপরোক্ত পরিবর্তনের চেষ্টা করুন: পরিবর্তিত rbহয়েছে wb
সোবারি

দ্রুত সাড়া দেওয়ার জন্য ধন্যবাদ। আমি আরবিটি ডাব্লু ডাব্লুতে পরিবর্তন করেছি এবং এখন আমি নিম্নলিখিত ত্রুটিটি পেয়েছি: আইওআরর: অবৈধ মোড: ডাব্লুবি
বিল জি।

)নীচের কোড বিভাগে প্রথম লাইনের শেষে একটি অনুপস্থিত রয়েছে। আমি এটি যুক্ত করার চেষ্টা করছিলাম, তবে এসও এর জন্য> characters টি অক্ষর (বোকামি সীমাবদ্ধতা) হওয়া দরকার ...
এজাল্যান্ড


8

সুতরাং আপনি টেমপ্লেটটি লোড করার পরে, আপনি রেন্ডারকে কল করুন এবং তারপরে একটি ফাইলে আউটপুট লিখুন। 'উইথ' স্টেটমেন্টটি একটি কনটেক্সট ম্যানেজার। ইন্ডেন্টেশনের অভ্যন্তরে আপনার কাছে 'এফ' নামক অবজেক্টের মতো একটি খোলা ফাইল রয়েছে।

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)

সুতরাং, এই জাতীয় চেহারাটি কি দেখতে চাইবে: TEMPLATE_DIR = os.path.join (os.path.dirname ( ফাইল ), 'টেমপ্লেট') jinja_en वातावरण = in jinja2.En वातावरण (অটোসকেপ = মিথ্যা, লোডার = jinja2.FileSystemLoader (TEMPLATE_DIR)) টেমপ্লেট = jinja_en वातावरण.get_template ('CommentCreate.html') self.response.out.writ (টেম্পলেট.রেন্ডার (টেমপ্লেট_ভেলিউজ)) খোলা ('my_new_html_file.html', 'w') হিসাবে f: f.writ (প্রতিক্রিয়া। কনটেন্ট) যেখানে টেমপ্লেট_ভ্যালুগুলি ইতিমধ্যে জনবহুল। প্রয়োজনীয় হিসাবে সংশোধন করুন। ধন্যবাদ
বিল জি।

স্পষ্টির জন্য ধন্যবাদ। অবশেষে এটি চেষ্টা করার সুযোগ পেলাম। প্রাথমিকভাবে আমি একটি ত্রুটি পেয়েছি "এই জাতীয় কোনও ফাইল বা ডিরেক্টরি নেই: 'my_new_file.html'"। স্পষ্টতই ফাইলটি ইতিমধ্যে বিদ্যমান রয়েছে। আমি তখন টেমপ্লেট ফাইলটি অনুলিপি করে এটিকে 'my_new_file.html' নামকরণ করেছি। এখন আমি একটি ত্রুটি পেয়েছি: আইওআরর: ফাইল লেখার জন্য খোলা নেই। গুগল অ্যাপ ইঞ্জিনে বিকাশ হওয়ায় এটি কি হতে পারে?
বিল জি।
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.