4

次のように、(Web アプリではなく) スタンドアロン ツールで Django テンプレート システムを使用しています。

from django import template

try:
    tmpl = loader.get_template(my_template_path)
    context = template.Context(my_template_context)
    txt = tmpl.render(context)
except (template.TemplateSyntaxError, template.TemplateDoesNotExist), e:
    # ...

テンプレートにエラーが含まれている場合、例外がスローされます。エラーのファイル名、行番号、および行位置を取得するにはどうすればよいですか? この場合、例外からこの情報を取得することを期待する必要がありますか (ブラウザーの応答をレンダリングしない)?

の値がと数値のペアを含むタプルでTemplateSyntaxErrorある属性があることに気付きました。はファイル名と同じです。数字はエラーの文字位置に似ていないように見えますが、別の解釈方法があるのではないでしょうか?sourceLoaderOriginLoaderOriginname

TemplateDoesNotExistには、見つからなかったテンプレートの名前を示す 、 、およびsourceのみが含まれているようです。読み込みを行っているテンプレート タグを見つける方法はありますか? または、このエラーは後の段階で行番号が利用できなくなったときに発生しますか?argsmessage

私はdjango.settings有効であり、それが重要な場合TEMPLATE_DEBUGはに設定されTrueています。(これは、テンプレートをウェブページにレンダリングするときに行番号を報告するために必要だと思います。派手なエラー表示があります。) また、 を介して設定された単純なテンプレートローダーを使用しTEMPLATE_LOADERSていますが、それは問題ではないと思います。また、現時点では Django 1.3 にこだわっているため、1.3 互換のソリューションが望ましいでしょう。

ありがとう!

4

1 に答える 1

1

sourceの属性がTemplateSyntaxErrorあなたが探しているものだと思います。Django コードは、上記の番号がエラーが発生した行番号であることを意味します。 https://github.com/django/django/blob/1.3.7/django/views/debug.py#L153を参照してください。

についてTemplateDoesNotExistは、無視されるようですが、テンプレートタグの結果として発生する場合は、https://github.com/django/django/blob/1.3.7/django/template/loader.py#L50を参照してください。

于 2013-06-07T08:17:12.310 に答える