注: Python のバージョンは 3.3.1、Django のバージョンは 1.5.1、オペレーティング システムは Windows 7 です。他のバージョンにはいくつかの違いがあり、読者は自分で調べることができます。
この問題は前の章で発見されたかもしれません。つまり、ビューがテキストを返すとき、HTML コードは Python コードにハードコーディングされます。 %s など。このように書くとプログラムが複雑になることが多く、また、HTML コードのプログラマーが Python コードを知っているとは限りません。つまり、現在の開発では HTML フロントエンド ページと Python バックエンドが分離されています。フロントエンドはページの表示のみを担当し、バックグラウンドはデータの処理やその他の操作のみを担当します。したがって、テンプレートは特に重要です。
では、テンプレートとは何ですか?
テンプレートは、ドキュメントのプレゼンテーションとコンテンツを分離するために使用されるテキストです。 テンプレートは、ドキュメントの表示方法を指定するプレースホルダーとさまざまな基本ロジック (テンプレート タグ) を定義します。 通常、テンプレートは HTML の生成に使用されますが、Django のテンプレートはテキストベースの形式でドキュメントを生成することもできます。簡単な例からテンプレートとは何かを学びましょう。 (この例は DjangoBook2 からのものです)
<head><title>Ordering notice</title></head> <body> <h1>Ordering notice</h1> <p>Dear {{ person_name }},</p> <p>Thanks for placing an order from {{ company }}. It's scheduled to ship on {{ ship_date|date:"F j, Y" }}.</p> <p>Here are the items you've ordered:</p> <ul> {% for item in item_list %} <li>{{ item }}</li> {% endfor %} </ul> {% if ordered_warranty %} <p>Your warranty information will be included in the packaging.</p> {% else %} <p>You didn't order a warranty, so you're on your own when the products inevitably stop working.</p> {% endif %} <p>Sincerely,<br />{{ company }}</p> </body> </html>
上記のように、Python コードを {{...}} または {%...%} に置き換える方法はテンプレートです, 最初のように、{{person_name}} は実際には変数であり、{%for....%} または {% if...%} はループです。上記のコードの意味を深く掘り下げることはせずに、その使用方法を段階的に学習してみましょう。
>>> from django import template >>> t = template.Template('My name is {{ name }}.') >>> c = template.Context({'name': 'Adrian'}) >>> print(t.render(c)) My name is Adrian. >>> c = template.Context({'name': 'Fred'}) >>> print(t.render(c)) My name is Fred.
上記のコードを見ると、試してみたくなりますが、2行目でエラーが発生します。一般的に、発生する可能性のある唯一のエラーは「DJANGO_SETTINGS_MODULE」エラーです。これは、Django が DJANGO_SETTINGS_MODULE 環境変数を検索するときに、この環境変数が settings.py に設定されており、Python シェルを直接起動するとどの構成であるかを認識できないためです。使用するファイル。たとえば、mysite が Python 検索パスにあると仮定すると、DJANGO_SETTINGS_MODULE を「mysite.settings」に設定する必要があります。したがって、環境変数を設定する手間を避けるためには、次のようにして Python シェルを起動する必要があります。
python manage.py シェル
これにより、不慣れな環境変数を設定する手間が省けます。
そのコード部分を分析してみましょう。
>>> from django import template #从django中导入template对象 >>> t = template.Template('My name is {{ name }}.') #使用template对象的Template()方法 >>> c = template.Context({'name': 'Adrian'}) #使用template对象的Context()函数给赋值,比如name的值就是Adrian,Context()的()里面是一个字典 >>> print(t.render(c)) #渲染模板,也就是讲Context赋值后的name的值Adrian替换上面Template()中的{{name}}并输出 My name is Adrian. >>> c = template.Context({'name': 'Fred'}) >>> print(t.render(c)) My name is Fred.
上記の例からわかるように、テンプレートを使用するには 3 つの手順があります。 1. Template 関数を呼び出します。 2. Context 関数を呼び出します。 3. render 関数を呼び出します。それはとても簡単です。
いくつかのコードを通して Context() 関数について説明しましょう。
#代码段1: >>> from django.template import Template,Context >>> t=Template('hello,{{name}}') >>> for name in ('A','B','C'): ... print(t.render(Context({'name':name}))) ... hello,A hello,B hello,C #代码段2: >>> from django.template import Template,Context >>> person={'name':'Thunder','age':'108'} >>> t=Template('{{person.name}} is {{person.age}} years old!') >>> c=Context({'person':person})#后面的这个person是一个字典 >>> t.render(c) 'Thunder is 108 years old!' #代码段3: >>> from django.template import Template,Context >>> t=Template('Item 2 is {{items.2}}')#items.2的意思是调用items列表的第3个元素,因为列表的索引是从0开始的 >>> c=Context({'items':['Apple','Banana','Orange']}) >>> t.render(c) 'Item 2 is Orange'
注: 上記の items.2 を items.-1 またはその他の負のインデックスにすることはできません。
上記の 3 つのコードをよく見てください。単に推論を行っているだけですか?また、デフォルトでは、変数が存在しない場合、テンプレート システムはそれを空の文字列として表示し、失敗を示すために何も行いません。