簡體   English   中英

如何調試Jinja2模板?

[英]How to debug Jinja2 template?

我正在使用jinja2模板系統進入django。 這真的很快,我很喜歡它。 不過,我調試模板時遇到了一些問題:如果我在模板中犯了一些錯誤(錯誤的標簽,壞的filtername,壞的結尾......),我根本沒有關於這個錯誤的信息。

例如,在django視圖中,我寫這個:

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)

我寫了一個jinja2模板:jinja.html:

{{myvar|notexistingfilter()}} Jinja !

注意,我故意生成一個不存在的過濾器來生成錯誤:

我期待像“notexistingfilter()未定義”這樣的東西,但我只有一個簡單的黑色白色追溯(不是通常的django調試消息):

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

我沒有得到錯誤發生的模板文件名,沒有關於錯誤本身的信息,因此調試jinja2非常困難。

我該怎么做才能獲得更多調試信息並找到jinja2模板中的錯誤?

先感謝您,

做了一些測試之后,我找到了答案:

通過直接在python下進行相同的模板測試,不使用django,就會出現調試消息。 所以它來自django。

修復程序位於settings.py中:必須將DEBUG設置為True並將TEMPLATE_DEBUG設置為False。

來自Jinja2文檔:

我的追溯看起來很奇怪。 發生了什么?

如果未編譯speedups模塊並且您使用的是沒有ctypes的Python安裝(沒有ctypes的Python 2.4,Jython或Google的AppEngine),Jinja2無法提供正確的調試信息,並且回溯可能不完整。 目前沒有針對Jython或AppEngine的良好解決方法,因為ctypes在那里不可用,並且不可能使用speedups擴展。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM