django-3.テンプレートエンジン


目次
  • テンプレートエンジンDTL(django template language)
  • テンプレートシステム
  • テンプレートシステム
  • を使用
  • 辞書およびコンテキスト
  • 基本的なテンプレートラベルとフィルタ
  • ラベル
  • フィルタ
  • テンプレートロードメカニズム
  • render()
  • includeテンプレートラベル
  • テンプレート継承

  • テンプレートエンジンDTL(django template language)
    テンプレートシステム
  • の2対の括弧で囲むテキスト({{変数}})は変数であり、「指定変数の値をここに挿入する」という意味である.
  • カッコとパーセンテージで囲まれたテキスト({%テンプレートラベル%}など)は、テンプレートラベル
  • である.
  • フィルタ、これは変数フォーマットを調整します:{{変数|フィルタ:「パラメータ」}}
  • 内蔵テンプレートラベルとフィルタ
  • テンプレートシステムの使用
    +        ,   Template   ,   Context   ,     render()   。
    +     :
    
    ```
    >>> from django import template
    >>> t = template.Template('My name is {
         { name }}.')  #       
    >>> c = template.Context({'name': 'Nige'})  #    (         )
    >>> print (t.render(c))  #     
    My name is Nige.
    ```    
    +    python manage.py shell         ,         ,  Django         ,      

    辞書とコンテキスト
  • 複数のコンテキスト、同じテンプレート
    >>> t = Template('Hello, {
           { name }}')
    >>> print (t.render(Context({'name': 'John'})))
    Hello, John
    >>> print (t.render(Context({'name': 'Julie'})))
    Hello, Julie
  • ドットは辞書のキー、属性、メソッドまたはオブジェクトのインデックスにアクセスすることができ、ボードシステムが変数名のドットに遭遇した場合、fooのような検索を以下の順序で試みる.bar,foo.2
  • 辞書検索(foo[「bar」)
  • プロパティ検索(foo.barなど)
  • メソッド呼び出し(foo.bar()など)
  • リストインデックス検索(foo[2])
  • テンプレートシステム変数にエンジンのstring_を挿入if_invalid構成オプション(デフォルトは空の文字列):
  • メソッドにalters_が設定されています.Data=Trueの場合、テンプレートのレンダリング時にメソッド
  • は実行されません.
  • メソッド検索中、メソッドが異常を投げ出すとsilent_が異常になります.variable_failureプロパティ、値はTrue
  • 変数が存在しない場合

  • 基本的なテンプレートラベルとフィルタ
    タブ
  • if/elseラベル
  • {%if...%}と{%endif%}のペア
  • {% else %},{% elif %}
  • {%if%}はand、orまたはnotの使用をサポートし、優先度not、and、or、カッコ
  • は使用できません.
  • forラベル
  • {%for...in...%}と{%forend%}のペア
  • {%for...in...reversed%}逆反復
  • {%empty%}句、反復可能オブジェクトが空の場合、その後の文
  • が実行される.
  • {%for%}ループの内部で、forloopというテンプレート変数にアクセスできます.そのプロパティ:
  • forloop.counterの値は、ループの回数を表す整数です.この属性の値は1から
  • です.
  • forloop.counter 0とforloop.counterは似ていますが、ゼロから始まる
  • です.
  • forloop.revcounterの値は、ループ内の残りの要素の数
  • を表す整数です.
  • forloop.revcounter 0とforloop.revcounterは似ていますが、インデックスはゼロベースの
  • です.
  • forloop.firstはブール値であり、最初のサイクルではTrue
  • である.
  • forloop.Lastはブール値で、最後のループはTrue
  • です.
  • ネストされたサイクルでforloop.parentloop親ループを参照するforloopオブジェクト

  • ifequal/ifnotequalラベル
  • {%ifequal......%}ラベルは2つの値を比較し、等しい場合は{%ifequal%}と{%endifequal%}の間の内容
  • を表示します.
  • {%ifequal%}ラベルは、オプションの{%else%}句
  • をサポートします.
  • {%ifequal%}のパラメータは、テンプレート変数、文字列、整数、および小数
  • のみです.
  • {%ifnotequal%}2つのパラメータが等しくないかどうかをテストする
  • コメント
  • 注記{{###}を使用して
  • と表記する.
  • 複数行コメント{%comment%},{%endcomment%}

  • フィルタ
    + {
         { name|lower }}: lower       {
         { name }}     ——        
    +        :{
         { my_list|first|upper }},           ,         
    +            :{
         { bio|truncatewords:"30" }},   bio      30   
    + addslashes :    、                :{ value|addslashes }}
    + date :               date   datetime   :{
         { pub_date|date:"F j, Y"}},
    + length :      。     ,       。      ,       。       ,   0 。

    テンプレートのロードメカニズム
  • settings.pyファイルで、TEMPLATES設定.値は、各テンプレートエンジンに対して、テンプレートエンジンが辞書であるリストです.次の設定があります.
  • BACKENDの値はPythonパスであり、DjangoテンプレートバックエンドAPIを実現するテンプレートエンジンクラスを指す.内蔵バックエンドにはdjan-goがあります.template.backends.django.DjangoTemplatesとdjango.template.backends.jinja2.Jinja2 .
  • DIRSはディレクトリリストを定義し、テンプレートエンジンはテンプレートソースファイル
  • を順番に検索する.
  • APP_DIRSはインストールしたアプリケーションでテンプレートを検索するかどうかを設定します.約束通りAPPS_DIRSがTrueに設定されている場合、DjangoTemplatesはINSTALLED_APPSの各アプリケーションで「templates」というサブディレクトリ
  • を検索する
  • OPTIONSは、バックエンドのためのいくつかの設定
  • である.
  • プロジェクトルートディレクトリにメインテンプレート(mysite/templatesディレクトリなど):'DIRS': [os.path.join(BASE_DIR, 'templates')],
  • ビュー関数でテンプレートロードメカニズム
  • を使用
    from django.template.loader import get_template
    t = get_template('current_datetime.html')  #       ,      
    html = t.render(Context({'current_date': now}))  #       ,    dir     Context  ,  Context  {'current_date': now}   Context().update({'current_date': now)

    render()
  • django.shortcutsモジュールのrender()
  • テンプレートのロード、コンテキストの作成、テンプレートのレンダリング、およびHttpResponseオブジェクトの作成はすべてrender()呼び出しによって置き換えられ、render()の戻り値はHttpResponseオブジェクト
  • である.
  • 例:
  • from django.shortcuts import render
    import datetime
    
    
    def current_datetime(request):
        now = datetime.datetime.now()
        return render(request, 'current_datetime.html', {'current_date': now})

    render()の最初のパラメータはリクエストオブジェクトで、2番目のパラメータはテンプレート名で、3番目の単数はオプションで、テンプレートに渡されるコンテキストを作成するフィールドです.3番目のパラメータを指定しない場合は、render()は空の辞書を使用します.
  • テンプレートをテンプレートディレクトリのサブディレクトリに格納するには、テンプレート名の前にサブディレクトリの名前と斜線return render(request, 'dateapp/current_datetime.html', {'current_date': now})
  • を付けるだけでよい.
    includeテンプレートラベル
  • {% include %}, {% include 'nav.html' %}
  • は、別のテンプレートの内容を導入する役割を果たす.そのパラメータは、導入するテンプレートの名前であり、変数であってもよいし、ハードコーディングされた文字列であってもよい(引用符に入れ、単一の二重引用符であってもよい)
  • テンプレートの継承
    区別されたクリップの定義
  • 親テンプレート
  • {% block    ,      %}           、       ,      。{% endblock %}
  • サブモジュール
  • {% extends "      " %}  #      ,     ,               ,    get_template()        
    {% block         %}     {% endblock %}
                ,   {
         { block.super }} ,    “  ”  ,            。       ,              

    転載先:https://www.cnblogs.com/Wang-Y/p/9322077.html