[ご注意]ジャンゴ・ジャンゴクイックスタートセクション3:ビューとテンプレート
上の注意公式文書や技術のブログ、エキスキー情報、および記録ノートは、公式ドキュメント・ルーチンを参照してください。
完全な公式文書:Djangoのドキュメント
推奨ブログ:Django2.2チュートリアル
Djangoは、公式ドキュメントをはじめ:パート3:ビューとテンプレート
ディレクトリ
1.ビュー
ビューのDjangoのコンセプトは「同じ機能やテンプレートのコレクションを持つページの種類」で、ビューは通常、特定のテンプレートを使用して、特定の機能を提供し、ページです。
ジャンゴでは、いくつかの他のコンテンツページは、ビューによって処理されます。ビューは、実際に簡単なPythonの関数である(ビューに基づいて、クラスのメソッドと呼ばれます)。Djangoは、対応するリクエストのURLアドレスの比較を選択して表示します。
MVTのためのDjangoの設計フレームワークは、ユーザが要求されたURLは、ビュー、処理するための要求を受信するの背面図であって、要求元に処理結果を返します。
URLとビューを関連付けるために、Djangoは構成された「URLconfの」を使用。URLconfのURLパターンは、ビューにマッピングされました。
(その他の参照からのURLconf: スケジューラのURL)
必要な2つのステップの使用を表示します。
- 定義されたビュー機能
- URLconf(のconfigureルート)の設定
1.1。ビューの定義
- Pythonは関数が定義されている図であるviews.pyに。
- ビューは、持っている必要がありますパラメータを、通常の要求と呼ばれる、ビューはオブジェクトのHttpResponseを返さなければならない、のHttpResponseパラメータの内容は、ブラウザのページに表示されます。
1.2。設定のURLconf
URLアドレスとビューとの間の対応を確立し、URLを設定します。新しいフォルダの下の一般的なビューviews.pyファイル用途urls.pyのconfigure URLへ、そしてurls.pyプロジェクトは、それをインポートします。
(理解する)プロセスのビューを見つけます
- リクエスタは、ブラウザのアドレスバーにURLを入力し、
- URL情報を取得するために、ウェブサイトのGETリクエストした後、その後、良いと書き込み1試合でのURLconfの1を、
- 場合は、一致が成功した後、対応する呼び出しビュー機能をすべてのURLconf成功した試合、そうでない場合は、404エラーが返されます。
- (よく読んで、公式文書の例を参照してください)
AのURLconfは、ビュー、URLのルールを:
- 正規表現を使用して、URL定義されたルール(使用Django2前に、お勧めできません後)
- Django2後の推奨パス機能
- ビュービュー機能をviews.pyに定義されています。
URLconfの構成は、2つのステップが必要です:
- アプリケーションのURLconf 1.定義
- 2.プロジェクトでは、URLconfのを含め
注意:
ビューは、一般的にアプリケーションディレクトリに直接urls.pyプロジェクト構成が、urls.py設定を適用していないし、その後urls.pyプロジェクトが来る含めます。
ショートカット:レンダリング()関数
ワンステップで、機能をレンダリング:!実用的なアプリケーションでは、リターンのHttpResponseオブジェクトは再使用のセットですが、操作は、エネルギーを節約するために、Djangoはショートカットを提供し、パラメータを渡し、テンプレートを読み込みます 長いインポートする必要がありません loader
と HttpResponse
、しかしからdjango.shortcuts
レンダリング輸入。
- 最初のパラメータの()関数をレンダリングする位置である(最初のパラメータは、ビューの関数である)リクエスト・オブジェクト、
- 2番目のパラメータはの位置でテンプレート。
- あなたも持つことができ、オプションの三番目の引数を、辞書には、データテンプレートが含まれているに渡される必要があります。
- 最後に、関数のレンダリングを返すカプセル化で作られたテンプレートによってレンダリングされた辞書データのHttpResponseオブジェクトを。
ショートカット:get_object_or_404()
Djangoは404にget_object_or_404()メソッドの戻りを提供し、同じ機能をレンダリングします。Djangoは内蔵の輸出モジュールショートカットで起動することを忘れないでくださいget_object_or_404()。
get_object_or_404()
この方法Djangoのモデルの位置パラメータ、- オブジェクトはHttp404エラーがポップアップ存在しない場合は、バックには、キーワード引数の任意の数に追いつくことができます。
- 見ます
get_object_or_404()
あります get_list_or_404()
動作原理の機能と get_object_or_404()
同じであることを除いて、 get()
関数が置き換えられている filter()
機能。リストが空の場合、それがスローされます Http404
例外を。
(フィルターは、結果セットのリストであるAPI関数フィルタのクエリ結果を、モデル化する。そしてするために使用され得る照会メソッドの結果を、そしてフィルタと複数の違いです!)
2.テンプレート
ジャンゴ、テンプレート内のフロントエンドコンテンツの定義では、その後、美しいの様々なを表示するためにテンプレートを呼び出して、クールな効果が現れました。
2.1。テンプレートを作成します
- テンプレートファイルを作成します。
- 設定テンプレートディレクトリ
1. テンプレートファイルを作成します。
プロジェクトのルートディレクトリにあるテンプレートテンプレートの ディレクトリ、そのテンプレートファイルを配置するために、各アプリケーションに同じ名前のカタログを確立することを提案します。
次のようなディレクトリ構造:
项目名
└──...
└── templates
└── 应用名
| ├── 模板1
| └── 模板2
└── 应用名2
├── 模板21
└── 模板22
テンプレート構文で出力変数は、次のようにテンプレートで定義することができ、上の変数は、ビューから渡されます。
{{}}変数名
テンプレートの構文で記述したコードセクションは、次のとおりです。%}%{スニペット
2. 設定テンプレートディレクトリ
パスセットテンプレートを探す:オープンプロジェクトの設定ファイルsettings.pyのファイル、セットには、テンプレートDIRSの値を
'DIRS': [os.path.join(BASE_DIR, 'templates')],
(注:ステッチの使用は、BASE_DIRは、プロジェクトのディレクトリです)
2.2。ビュー・テンプレート・コール
ビューコールテンプレートは3つの段階に分かれています。
- テンプレートを探す:テンプレートファイルがロードされます。例えば、テンプレートディレクトリのhtmlファイルの内容を取得するために、テンプレートオブジェクトを取得します。
- 用django.templateインポートローダから、loader.get_template()
- 定義されたテンプレートコンテキスト:テンプレートファイルにデータを渡します。
RequestContextの()関数django.template輸入RequestContextのからすると、(Django2.xが障害を見つけ、与えられた文脈がdictのではなく、RequestContextのでなければならない ... その理由は、新しいバージョンでは、コンテキストは辞書でなければならないことです)- 更新:コンテキストとして辞書の定義、例えば空の辞書として{}
- テンプレートをレンダリング:標準のHTMLコンテンツを取得します。
- 用template.render(コンテキスト)
ビューコールテンプレートコードをレンダリング、繰り返し荷重を書くために、開発者を減らすためには、以上の三つの部分を実行する必要があり、Djangoはショートカット機能を提供: 、テンプレートを呼び出すために使用します。この方法は、 3つのパラメータを含みます。render()
render()
- 最初のパラメータは、リクエストオブジェクトであります
- 2番目のパラメータは、ファイルパスのテンプレート
- 3番目のパラメータは、ディクショナリーであるテンプレートにコンテキストデータの転送を表します。
2.3。テンプレートハードコードされたURLを削除
リンクがある場合、テンプレート内のリンクを記述する場合は、コードは非常に不利な変更のために、ハードコードされました。
ハードコードされたリンクと強い結合、多くのアプリケーションが含まれているプロジェクトのために、それを修正することは非常に困難です。
ただ、URLが定義与える名の別名を、あなたはこの問題を解決するためにそれを使用することができます。
長いほど アプリケーション
.urls
のurl()
ことで関数のパラメータとして名前のURLの名前を定義し、あなたが使用することができる{% url %}
代わりに、それのタグを:比如:<li><a href="{% url 'detail' question.id %}">{{ question.question_text }}</a></li>
Djangoはになりますアプリケーションの
urls
ファイル検索name='detail'
コンクリートは、次の行で、URL:path('<int:question_id>/', views.detail, name='detail'),
このように、URLのビューでも、テンプレートに変更を加える必要はありません変更します。
3. [追加URLの名前空間名
DjangoのURLは、複数のアプリを使用してプロジェクトを区別するために名前を付けますか?どのようにDjangoは知っている URLが終わり、それにラベルのアプリケーションに対応するでしょうか? {% url %}
A:名前空間のURLconfの使用。名前空間のルートのURLconfを追加します。プラス app_name
セットの名前空間。
以下のような:ポーリングアプリケーション polls/urls.py
ファイル、追加 app_name
のネームスペースを設定、すなわちurlpatternsに適用される:APP_NAME =「世論調査」
これを完了します。
from django.urls import path
from . import views
app_name = 'polls'
urlpatterns = [
path('', views.index, name='index'),
path('<int:question_id>/', views.detail, name='detail'),
path('<int:question_id>/results/', views.results, name='results'),
path('<int:question_id>/vote/', views.vote, name='vote'),
]
このように、テンプレートにすることができ、{%のURL ' 詳細' question.id%}の{ '%のURL :詳細世論調査' question.id%}。
<li><a href="{% url 'polls:detail' question.id %}">{{ question.question_text }}</a></li>
注:urls.pyプロジェクトは、urls.pyにはアプリケーションが含まれている場合、あなたはまた、追加することができます名前空間を、
如:パス( '世論調査/'、( 'polls.urls'、含める名前空間= '世論調査'))、
- - -終わり - - -