Pergunta

Estou usando o sistema de modelo Jinja2 no Django. É muito rápido e eu gosto muito. No entanto, tenho algum problema para depurar modelos: se eu cometer alguns erros em um modelo (tag ruim, bad filterame, extremidade ruim do bloco ...), eu não tenho informações sobre esse erro.

Por exemplo, em uma visão de Django, escrevo isso:

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)

Eu escrevo um modelo Jinja2: jinja.html:

{{myvar|notexistingfilter()}} Jinja !

Observe, coloquei de propósito um filtro não existente para gerar um erro:

Eu esperava algo como "NotExistingFilter () não definido", mas recebi apenas um simples traceback preto em branco (não a mensagem usual de depuração do 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

Não recebo o nome do arquivo de modelo onde ocorreu o erro, nenhuma informação sobre o próprio erro, por isso é muito difícil depurar Jinja2.

O que devo fazer para ter mais informações de depuração e descobrir onde está um erro dentro de um modelo Jinja2?

Agradeço antecipadamente,

Foi útil?

Solução

Depois de fazer mais alguns testes, encontrei a resposta:

Ao fazer o mesmo teste de modelo, diretamente sob Python, sem usar o Django, as mensagens de depuração estão presentes. Então vem de Django.

A correção está em Settings.py: é preciso definir o Debug como True e definir o template_debug como false.

Outras dicas

Da documentação Jinja2:

Meus rastreios parecem estranhos. O que está acontecendo?

Se o módulo Speedupps não for compilado e você estiver usando uma instalação do Python sem Ctypes (Python 2.4 sem Ctypes, Jython ou AppEngine do Google) Jinja2 não conseguir fornecer informações corretas de depuração e o Traceback pode estar incompleto. Atualmente, não existe uma boa solução alternativa para Jython ou o AppEngine, pois os ctypes não estão disponíveis lá e não é possível usar a extensão de aceleração.

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

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top