2010-01-04 57 views
20

Tôi đang sử dụng hệ thống mẫu jinja2 vào django. Nó thực sự nhanh và tôi rất thích nó. Tuy nhiên, tôi có một số vấn đề để gỡ lỗi mẫu: Nếu tôi thực hiện một số lỗi vào mẫu (thẻ không hợp lệ, tên tệp không hợp lệ, phần cuối của khối ...), tôi không có tất cả thông tin về lỗi này.Làm cách nào để gỡ lỗi mẫu Jinja2?

Ví dụ, Trong một cái nhìn django, tôi viết những dòng này:

from jinja2 import Environment, PackageLoader 
env = Environment(loader=PackageLoader('main', 'templates')) 

def jinja(req): 
    template = env.get_template('jinja.html') 
    output=template.render(myvar='hello') 
    return HttpResponse(output) 

tôi viết một mẫu jinja2: jinja.html:

{{myvar|notexistingfilter()}} Jinja ! 

Chú ý, tôi đặt vào mục đích một bộ lọc không tồn tại để tạo lỗi:

Tôi đã mong đợi một cái gì đó như "notexistingfilter() không được xác định", nhưng tôi chỉ nhận được một màu đen đơn giản trên traceback trắng (không phải thông báo lỗi django thông thường):

Traceback (most recent call last): 

    File "/usr/local/lib/python2.6/dist-packages/django/core/servers/basehttp.py", line 279, in run 

    self.result = application(self.environ, self.start_response) 

    File "/usr/local/lib/python2.6/dist-packages/django/core/servers/basehttp.py", line 651, in __call__ 
    return self.application(environ, start_response) 


    File "/usr/local/lib/python2.6/dist-packages/django/core/handlers/wsgi.py", line 241, in __call__ 
    response = self.get_response(request) 

    File "/usr/local/lib/python2.6/dist-packages/django/core/handlers/base.py", line 134, in get_response 

    return self.handle_uncaught_exception(request, resolver, exc_info) 

    File "/usr/local/lib/python2.6/dist-packages/django/core/handlers/base.py", line 154, in handle_uncaught_exception 
    return debug.technical_500_response(request, *exc_info) 


    File "/usr/local/lib/python2.6/dist-packages/django/views/debug.py", line 40, in technical_500_response 
    html = reporter.get_traceback_html() 

    File "/usr/local/lib/python2.6/dist-packages/django/views/debug.py", line 84, in get_traceback_html 

    self.get_template_exception_info() 

    File "/usr/local/lib/python2.6/dist-packages/django/views/debug.py", line 117, in get_template_exception_info 
    origin, (start, end) = self.exc_value.source 



TypeError: 'Template' object is not iterable 

Tôi không nhận được tên tệp mẫu nơi lỗi xảy ra, không có thông tin về lỗi, do đó rất khó gỡ lỗi jinja2.

Tôi nên làm gì để có thêm thông tin gỡ lỗi và tìm nơi có lỗi trong mẫu jinja2?

Cảm ơn bạn trước,

+0

Tại sao bạn không sử dụng các mẫu của Django? Chúng gần giống với Jinja2 và bạn nhận được thông báo lỗi thực sự. Tại sao không chỉ đơn giản là quay trở lại các mẫu của Django? –

+0

Phần dưới của công thức này có một số gợi ý tại sao sử dụng Jinja2 thay vì các mẫu của Django: http://appengine-cookbook.appspot.com/recipe/upgrade-the-django-templating-system-to-jinja2/ –

+3

@S. Lott kinh nghiệm của tôi là các mẫu của Django không có gì giống như Jinja. Các mẫu Django buộc tôi phải tách riêng tính toán và logic khỏi các mẫu/bản trình bày của tôi. Đây là một nỗi đau lớn trong mông khi tôi muốn làm một cái gì đó như, nói, gọi chức năng của một đối tượng với các đối số. Tôi là tất cả cho thiết kế mẫu tốt, nhưng không ép buộc nó bằng cách làm tê liệt hệ thống templating, khuyến khích nó với thiết kế tốt của hệ thống đó và tài liệu tốt về thực hành tốt nhất. –

Trả lời

16

Sau khi thực hiện một số thử nghiệm nhiều hơn, tôi tìm thấy câu trả lời:

Bằng cách làm bài kiểm tra cùng một mẫu, trực thuộc trăn, mà không sử dụng django, các thông điệp debug có mặt. Vì vậy, nó đến từ django.

Sửa chữa trong settings.py: Người dùng phải đặt DEBUG thành True và đặt TEMPLATE_DEBUG thành False.

+0

Câu trả lời này có dễ dàng với Google ở ​​đâu đó không? Tôi đã đề cập đến một hoặc hai hướng dẫn khác nhau về việc thiết lập Jinja với Django, và không nơi nào tôi nhớ thấy điều này. Tôi rất vui khi nhận được thông báo lỗi của Jinja cuối cùng! –

+0

@Eric bạn có thể chọn câu trả lời của riêng mình làm câu trả lời cho câu hỏi của bạn. – OozeMeister

6

Từ Documentation Jinja2:

tracebacks My trông lạ. Chuyện gì đang xảy ra?

Nếu mô-đun tăng tốc không được biên soạn và bạn đang sử dụng cài đặt Python không có ctypes (Python 2.4 không có ctypes, Jython hoặc AppEngine của Google) Jinja2 không thể cung cấp thông tin gỡ lỗi chính xác và truy xuất có thể không đầy đủ. Hiện tại không có cách giải quyết tốt nào cho Jython hoặc AppEngine vì ctypes không khả dụng ở đó và không thể sử dụng tiện ích tăng tốc.

http://jinja.pocoo.org/2/documentation/faq#my-tracebacks-look-weird-what-s-happening

+0

Cảm ơn bạn đã trả lời. Trước khi đặt câu hỏi, tôi biên dịch lại jinja2 bằng mô-đun tăng tốc. Tôi đang sử dụng một gói debian cho python, vì vậy tôi đoán tôi không phải trong trường hợp này ... Tôi hy vọng. Làm thế nào để kiểm tra Ubuntu sử dụng ctypes trong gói python của nó? – Eric

Các vấn đề liên quan