PythonのDjangoフレームワークのテンプレートに関する知識を詳しく理解する

2860 ワード

HTMLはPythonコードに直接ハードコーディングされている.

def current_datetime(request):
  now = datetime.datetime.now()
  html = "It is now %s." % now
  return HttpResponse(html)


この技術はビューがどのように動作しているかを説明するのに便利ですが、HTMLを直接あなたのビューにハードコーディングするのは良いアイデアではありません.なぜか見てみましょう.
  • ページのデザインを変更するには、Pythonコードを変更する必要があります.サイト設計の変更は、下位のPythonコードの変更よりも頻繁に行われることが多いため、Pythonコードの変更を行わずに設計を変更できると便利になります.
  • Pythonコードの作成とHTML設計は2つの異なる仕事であり、多くの専門的なウェブサイト開発環境は彼らを異なる人員(さらには異なる部門)に割り当てて完成させる.設計者とHTML/CSSのコード担当者は、Pythonのコードを編集して仕事を完成させるように要求されるべきではありません.
  • プログラマーがPythonコードを作成し、設計者がテンプレートを作成する2つの作業を同時に行う効率は最も高く、PythonとHTMLを含むファイルの編集作業を他の人が完了するのを待つよりもはるかに優れています.

  • これらの理由から、ページのデザインとPythonのコードを分離すると、より清潔で簡潔でメンテナンスが容易になります.Djangoのテンプレートシステム(Template System)を用いてこのモードを実現することができ,これが本章で具体的に議論する問題である.
    テンプレートシステムの基本知識
    テンプレートは、ドキュメントの表現形式と内容を分離するテキストです.テンプレートは、プレースホルダと、ドキュメントがどのように表示されるかを指定するために使用される様々な基本論理(テンプレートラベル)を定義します.テンプレートは通常HTMLを生成するために使用されますが、Djangoのテンプレートはテキストフォーマットベースのドキュメントを生成することもできます.
    簡単な例のテンプレートから始めましょう.このテンプレートには、会社の署名者に感謝するHTMLページが記載されています.次のいずれかの形式のレターとして使用できます.
    
    
    Ordering notice
    
    
    
    

    Ordering notice

    Dear {{ person_name }},

    Thanks for placing an order from {{ company }}. It's scheduled to ship on {{ ship_date|date:"F j, Y" }}.

    Here are the items you've ordered:

    {% for item in item_list %}
  • {{ item }}
  • {% endfor %}
    {% if ordered_warranty %}
    Your warranty information will be included in the packaging.
    {% else %}
    You didn't order a warranty, so you're on your own when
    the products inevitably stop working.
    {% endif %}
    Sincerely,{{ company }}
    このテンプレートは、いくつかの変数とテンプレートラベルが追加されたベースHTMLです.次のように分析してみましょう.
    2つの括弧で囲まれた文字(たとえば{{person_name}})を変数(variable)と呼ぶ.これは、指定した変数の値をここに挿入することを意味します.変数の値をどのように指定しますか?後で説明します.
    カッコとパーセンテージで囲まれたテキスト({%if ordered_warranty%}など)は、テンプレートタグです.ラベル(tag)定義は、テンプレートシステムに特定の作業を完了するように通知するラベルのみであることが明確である.
    この例のテンプレートには、forタグ({%for item in item_list%})とifタグ({%if ordered_warranty%})が含まれています.
    forラベルはPythonのfor文に似ており、シーケンス内の各項目にループアクセスできます.ifラベルは、あなたが予想したように、論理的な判断を実行するために使用されます.ここでtagラベルチェックordered_warranty値がTrueであるかどうか.もしそうであれば、テンプレートシステムは{%if ordered_warranty%}と{%else%}の間の内容を表示します.そうでない場合、{%else%}と{%endif%}の間の内容が表示されます.{%else%}はオプションです.
    最後に、このテンプレートの第2のセグメントにはfilterフィルタの例があり、変数出力フォーマットを変換するのに最も便利な方法である.この例の{ship_date|date:"Fj,Y"}}のように変数ship_dateはdateフィルタに渡され、同時にパラメータ「Fj,Y」を指定する.dateフィルタはパラメータに基づいてフォーマット出力を行います.フィルタはパイプ記号(|)で呼び出されます.具体的にはUnixパイプ記号を参照してください.
    Djangoテンプレートには多くのtagsとfiltersが内蔵されており、私たちは続々と勉強します.付録Fには多くのtagsとfiltersのリストがリストされており、これらのリストを熟知することはあなたにとって良いアドバイスです.それを利用して自分のtagとfiltersを作成することができます.