2015-05-21 15 views
7

Tôi có ứng dụng Flask gọi flask.render_template mà không gặp vấn đề gì khi được gọi từ bình cầu http request.làm cho mẫu jinja2 không có bối cảnh Flask

tôi cần những phương pháp tương tự để làm việc bên ngoài của bình (từ một con trăn lại kết thúc chương trình)

resolved_template = render_template(template_relative_path, **kwargs) 

tôi có thể sử dụng jinja2 api, nhưng tôi muốn cùng một phương pháp để làm việc, trong cả hai tình huống (bình và dòng lệnh)

Trả lời

7

Bạn cần hiển thị nó trong ngữ cảnh ứng dụng. Nhập ứng dụng của bạn vào mã phụ trợ của bạn và thực hiện các thao tác sau.

with app.app_context(): 
    data = render_template(path, **context) 
+0

chỉ muốn thêm một cảnh báo nhỏ với phương pháp này : khi runnng trong Flask, phương thức này gây ra db.session.rollbak(). Vì vậy, nếu bạn có một giao dịch trong tiến trình, bạn sẽ muốn tránh tạo ra một bối cảnh mới. –

7

Nếu bạn muốn hoàn toàn bỏ qua flask và sử dụng hoàn toàn Jinja cho rendering mẫu của bạn, bạn có thể làm như vậy

import jinja2 

def render_jinja_html(template_loc,file_name,**context): 

    return jinja2.Environment(
     loader=jinja2.FileSystemLoader(template_loc+'/') 
    ).get_template(file_name).render(context) 

Và sau đó bạn có thể gọi chức năng này để render html của bạn

+1

Tốt hơn, chỉ cần sử dụng môi trường jinja mặc định của Flask với 'app.jinja_env'. – 0x24a537r9

0

Những gì tôi sử dụng là mã này:

import jinja2 
template_values = { 
    'value_name_in_html': value_name_in_python, 
} 

template = JINJA_ENVIRONMENT.get_template("file_patch") 
self.response.write(template.render(template_values)) 
Các vấn đề liên quan