PythonのDjangoフレームにテンプレートをロードする方法

4368 ワード

Djangoは、テンプレートのロード呼び出しプロセスおよびテンプレート自体の冗長コードを低減するために、ディスクからテンプレートをロードするための便利で強力なAPIを提供します.
このテンプレートを使用してAPIをロードするには、まずテンプレートの保存場所をフレームワークに伝える必要があります.設定された保存ファイルはsettingsです.py.
もしあなたが一歩一歩私たちについて勉強してきたら、すぐにsettingsを開けてください.pyプロファイル、TEMPLATE_を見つけますDIRSという設定でしょう.デフォルト設定は空のメタグループ(tuple)で、自動的に生成されるコメントが追加されます.

TEMPLATE_DIRS = (
 # Put strings here, like "/home/html/django_templates" or "C:/www/django/templates".
 # Always use forward slashes, even on Windows.
 # Don't forget to use absolute paths, not relative paths.
)


この設定は、Djangoのテンプレートロードメカニズムがテンプレートを検索する場所を示します.テンプレートを保存してTEMPLATE_に追加するディレクトリを選択します.DIRS中:

TEMPLATE_DIRS = (
 '/home/django/mysite/templates',
)


以下に注意事項を示します.
Webサーバを実行しているユーザーが、そのディレクトリのサブディレクトリとテンプレートファイルを読み込むことができる限り、任意のディレクトリを指定できます.テンプレートを配置するのに適切な場所が見つからない場合は、Djangoプロジェクトにtemplatesディレクトリを作成することをお勧めします.
もしあなたのTEMPLATE_DIRSには1つのディレクトリしか含まれていません.そのディレクトリの後にカンマを付けるのを忘れないでください. 
Bad:


# Missing comma!
TEMPLATE_DIRS = (
 '/home/django/mysite/templates'
)

 
Good:

# Comma correctly in place.
TEMPLATE_DIRS = (
 '/home/django/mysite/templates',
)

Pythonでは、カッコ式との曖昧さを解消するために、単一要素のメタグループにカンマを使用する必要があります.これは初心者がよく犯す間違いだ.
Windowsプラットフォームを使用している場合は、次のように、ドライブ記号を含めてUnixスタイルのスラッシュ(/)を使用します.

TEMPLATE_DIRS = (
 'C:/www/django/templates',
)


最も手間が省ける方法は、絶対パス(すなわち、ファイルシステムのルートディレクトリから始まるディレクトリパス)を使用することです.より柔軟で負の干渉を減らすには、DjangoプロファイルがPythonコードであることを利用してTEMPLATE_を動的に構築します.DIRSの内容は、次のようになります.

import os.path

TEMPLATE_DIRS = (
 os.path.join(os.path.dirname(__file__), 'templates').replace('\\','/'),
)


この例では、不思議なPython内部変数__を使用しています.file__ ,この変数は、コードが存在するPythonモジュールファイル名に自動的に設定されます.os.path.dirname(__file__)`` 自分のファイル、すなわちsettingsが取得されます.pyが存在するディレクトリはos.path.joinこの方法では、このディレクトリをtemplatesに接続します.Windowsでは、正しい後方スラッシュ""前方スラッシュではなく接続をスマートに選択します.
ここで私たちが直面しているのは動的言語pythonコードです.私が注意しなければならないのは、あなたの設定ファイルに間違ったコードを書かないことです.これは重要です.ここで構文エラーを導入したり、エラーを実行したりすると、Django-poweredサイトがクラッシュする可能性があります.
完了TEMPLATE_DIRS設定後、次にビューコードを変更し、テンプレートパスをハードコーディングするのではなくDjangoテンプレートロード機能を使用するようにします.current_を返しますdatetimeビューでは、次のように変更します.

from django.template.loader import get_template
from django.template import Context
from django.http import HttpResponse
import datetime

def current_datetime(request):
 now = datetime.datetime.now()
 t = get_template('current_datetime.html')
 html = t.render(Context({'current_date': now}))
 return HttpResponse(html)

この例では、関数djangoを使用します.template.loader.get_template()は、ファイルシステムからテンプレートを手動でロードするのではなく、このget_template()関数はテンプレート名をパラメータとし、ファイルシステムでモジュールの場所を見つけ、ファイルを開き、コンパイルされたTemplateオブジェクトを返します.
この例では、選択したテンプレートファイルはcurrent_です.datetime.html、しかしこれと.html接尾辞には直接的なつながりはありません.論理的であれば、任意の接尾辞の任意のファイルを選択できます.接尾辞のないファイルを選択しても問題はありません.
テンプレートファイルがシステムにある場所を特定するには、get_template()メソッドは、すでに設定されているTEMPLATEに自動的に接続します.DIRSディレクトリとあなたがこのメソッドに入力したテンプレート名パラメータ.例えば、あなたのTEMPLATE_DIRSディレクトリは'/home/django/mysite/templates'に設定され、上のget_template()呼び出しで/home/django/mysite/templates/current_が見つかりますdatetime.htmlという位置です.
get_template()指定した名前のテンプレートが見つかりません.TemplateDoesNotExist例外が発生します.何が起こるかを知るには、3章の内容に従ってDjangoプロジェクトディレクトリでpython manageを実行します.py runserverコマンドで、Django開発サーバを再起動します.次に、ブラウザに指定したページにナビゲートしてcurrent_をアクティブにするように伝えます.datetimeビュー(http://127.0.0.1:8000/time/).DEBUGアイテムがTrueに設定されているとしますが、current_を作成していますか?datetime.htmlこのテンプレートファイルでは、Djangoのエラープロンプトページが表示され、TemplateDoesNotExistエラーが発生したことを示します.

Screenshot of a TemplateDoesNotExist error.

このページは、3章で説明したエラーページと似ています.デバッグ情報領域が1つ増えただけです.テンプレートローダの事後チェック領域です.この領域には、Djangoがどのテンプレートをロードするか、試行ごとにエラーが発生する原因(ファイルが存在しないなど)が表示されます.テンプレートのロードエラーをデバッグしようとすると、これらの情報は非常に役立ちます.
次に、次のテンプレートコードcurrent_を含むテンプレートディレクトリを作成します.datetime.htmlファイル:

It is now {{ current_date }}.


Webブラウザでページをリフレッシュすると、完全な解析後のページが表示されます.