2013-02-09 41 views
6

Tôi là người mới đối với Jinja2 và đang tự hỏi liệu có cách tạo mẫu, trong khi được tạo, in trên bảng điều khiển hoặc chuyển hướng đầu ra cho một số loại luồng không?jinja2 in giao diện điều khiển hoặc ghi nhật ký

Vì các mẫu Jinja2 có thể có logic bên trong, tôi nghĩ đôi khi nên đăng nhập một số thông tin vào một số loại tệp nhật ký hoặc ít nhất là được in trên bảng điều khiển.

Điều này có thể hoặc tôi chỉ đang nói rác?

Trả lời

7

Tôi nghĩ bạn có thể đạt được điều đó bằng cách sử dụng các bộ lọc (http://jinja.pocoo.org/docs/api/#custom-filters) hoặc tiện ích mở rộng (http://jinja.pocoo.org/docs/extensions/#adding-extensions). Ý tưởng là chỉ cần in bộ lọc hoặc tiện ích mở rộng thẳng đến bảng điều khiển.

Không thử nghiệm nhưng các bộ lọc nên một cái gì đó như:

def debug(text): 
    print text 
    return '' 

environment.filters['debug']=debug 

Để được sử dụng như:

...<p>Hello world!</p> {{"debug text!"|debug}}... 

Hãy nhớ để loại bỏ các debug trên mã sản xuất!

+0

oh mát mẻ! Tôi biết có một số cách để đạt được nó. Bây giờ, tôi có một vấn đề với điều này. Tôi không thể gửi các chuỗi chữ đến bộ lọc tùy chỉnh, tôi có thể đạt được nó bằng một văn bản {% set text = "debug!" %} thẻ và sau đó {{text | debug}}. Tôi không biết liệu chuỗi ký tự có thể được gửi tới bộ lọc hay không ...: -o –

+0

, đã giải quyết được phần nào (hoặc có lẽ đó là cách nó nên) bằng cách sử dụng '()' để bao gồm tất cả chuỗi mà tôi cần in. Ví dụ: {{("văn bản gỡ lỗi!") | debug}}. Hoặc chính xác hơn: {{("debug text! Value:" ~ valueINeedToLog) | gỡ lỗi}} –

2

Một cách tiếp cận sử dụng bộ vi xử lý bối cảnh tương tự nhưng hơi khác nhau:

Trong python/bình:

@app.context_processor 
def utility_functions(): 
    def print_in_console(message): 
     print str(message) 

    return dict(mdebug=print_in_console) 

Trong jinja2, Sử dụng nó bất cứ nơi nào như sau:

{{ mdebug("any text or variable") }} 
Các vấn đề liên quan