web-dev-qa-db-ja.com

FlaskでJinja2内の変数タイプをチェック

作成したテンプレートファイルには次のものが含まれています。

{% if type({'a':1,'b':2}) is dict %}
    print "Oh Yes!!"
{% else %}
    print "Oh No!!!"
{% endif %}

次に、Jinja2は次のように応答します。

TemplateAssertionError: no test named 'dict'

私はJinja2とFlaskがまったく新しい

20
Rakib

mappingテスト を探しています:

{% if {'a': 1, 'b': 2} is mapping %}
    "Oh Yes!"
{% else %}
    "Oh No!"
{% endif %}

JinjaはPythonではないため、すべての組み込み関数にアクセスすることはできません(たとえば、追加しない限り、typeprintは存在しませんそれらを コンテキスト に。Flaskでは、これを context_processorデコレータ )。

実際にはprintはまったく必要ありません。デフォルトでは、すべてが出力されます(extendsが親である子テンプレートを使用している場合を除き、その場合は NULLマスターフォールバックなどの興味深いこと マスターテンプレートが出力されます)。

36
Sean Vieira

どうですか:

{% if {'a':1,'b':2} is mapping %}
    print "Oh Yes!!"
{% else %}
    print "Oh No!!!"
{% endif %}

組み込みテストのリスト を参照してください。

5

カスタムタイプを取得する場合は、次の例のようにフィールド名にアクセスできます。

  {% if 'RelationField' in field.__class__.__name__ %}
      <div class="col-md-1">
      Manage object
      </div>
  {% endif %}
5
Vasili Pascal