手順 2: ビューおよびページ テンプレートを使用して Django アプリを作成するStep 2: Create a Django app with views and page templates

前の手順: Visual Studio プロジェクトとソリューションを作成するPrevious step: Create a Visual Studio project and solution

現在 Visual Studio プロジェクトにあるのは、1 つ以上の Django アプリを実行できる Django プロジェクトのサイトレベル要素だけです。What you have so far in the Visual Studio project are only the site-level components of a Django project, which can run one or more Django apps. 次の手順では、単一のページを持つ最初のアプリを作成します。The next step is to create your first app with a single page.

この手順では、次の方法を学習します。In this step you now learn how to:

  • 単一のページを持つ Django アプリを作成する (手順 2-1)Create a Django app with a single page (step 2-1)
  • Django プロジェクトからアプリを実行する (手順 2-2)Run the app from the Django project (step 2-2)
  • HTML を使用してビューを表示する (手順 2-3)Render a view using HTML (step 2-3)
  • Django ページ テンプレートを使用してビューを表示する (手順 2-4)Render a view using a Django page template (step 2-4)

手順 2-1: 既定の構造を備えたアプリを作成するStep 2-1: Create an app with a default structure

Django アプリは、特定の目的のために関連ファイルのセットを含む別個の Python パッケージです。A Django app is a separate Python package that contains a set of related files for a specific purpose. Django プロジェクトには、任意の数のアプリを含めることができます。このことは、Web ホストが単一のドメイン名から任意の数の別箇のエントリ ポイントを提供できるという事実を表しています。A Django project can contain any number of apps, which reflects the fact that a web host can serve any number of separate entry points from a single domain name. たとえば、contoso.com のようなドメインに対する Django プロジェクトには、support.contoso.com に 1 つ目のアプリ、support.contoso.com に 2 つ目のアプリ、docs.contoso.com に 3 つ目のアプリを含めることが可能です。For example, a Django project for a domain like contoso.com might contain one app for www.contoso.com, a second app for support.contoso.com, and a third app for docs.contoso.com. この場合、Django プロジェクトがサイトレベル URL のルーティングと設定 (プロジェクトの urls.py および settings.py ファイル内) を処理する一方で、各アプリは内部ルーティング、ビュー、モデル、静的ファイル、管理インターフェイスを使って、そのアプリ独自の個々のスタイル設定や動作を保持します。In this case, the Django project handles site-level URL routing and settings (in its urls.py and settings.py files), while each app has its own distinct styling and behavior through its internal routing, views, models, static files, and administrative interface.

通常、Django アプリは、標準的なファイル セットから始まります。A Django app typically begins with a standard set of files. 次に示すように、Visual Studio では Django プロジェクト内にある Django アプリを初期化する項目テンプレートを提供しています。また、同様の目的を果たす統合メニュー コマンドもあります。Visual Studio provides item templates to initialize a Django app within a Django project, along with an integrated menu command that serves the same purpose:

  • テンプレート: ソリューション エクスプローラーで、プロジェクトを右クリックして、[追加] > [新しい項目] の順に選択します。Templates: In Solution Explorer, right-click the project and select Add > New item. [新しい項目の追加] ダイアログで、Django 1.9 アプリ テンプレートを選択し、[名前] フィールドにアプリ名を指定して、[OK] を選択します。In the Add New Item dialog, select the Django 1.9 App template, specify the app name in the Name field, and select OK.

  • 統合コマンド: ソリューション エクスプローラーで、プロジェクトを右クリックして、[追加] > [Django アプリ] の順に選択します。Integrated command: In Solution Explorer, right-click the project and select Add > Django app. このコマンドでは、名前の入力を要求して、Django 1.9 アプリを作成します。This command prompts you for a name and creates a Django 1.9 app.

    Django アプリを追加するためのメニュー コマンド

どちらかの方法を使って、"HelloDjangoApp" という名前のアプリを作成します。Using either method, create an app with the name "HelloDjangoApp". 結果として、プロジェクト内にこの名前のフォルダーが表示されます。フォルダーには、次の表に示す項目が含まれています。The result is a folder in your project with that name that contains items as described in the table that follows.

ソリューション エクスプローラーでの Django アプリ ファイル

アイテムItem 説明Description
__init__.py__init__.py アプリをパッケージとして識別するファイル。The file that identifies the app as a package.
migrationsmigrations Django が、モデルに対する変更に沿ってデータベースを更新するスクリプトを格納するためのフォルダー。A folder in which Django stores scripts that update the database to align with changes to the models. Django の移行ツールは、現在のモデルに適合するように、データベースの任意の以前のバージョンに必要な変更を適用します。Django's migration tools then apply the necessary changes to any previous version of the database so that it matches the current models. 移行を使用して、モデルにフォーカスを保持し、Django が基になるデータベース スキーマを処理できるようにします。Using migrations, you keep your focus on your models and let Django handle the underlying database schema. 移行については手順 6 で説明します。ここでは、フォルダーには単に __init__.py ファイル (フォルダーが独自の Python パッケージを定義していることを示す) が含まれています。Migrations are discussed in step 6; for now, the folder simply contains an __init__.py file (indicating that the folder defines its own Python package).
templatestemplates アプリ名に一致するフォルダー内に単純なファイル index.html を含む Django ページ テンプレートのフォルダー。A folder for Django page templates containing a single file index.html within a folder matching the app name. (Visual Studio 2017 15.7 以前の場合、ファイルは [テンプレート] のすぐ下に含まれます。手順 2-4 には、サブフォルダーを作成するための指示があります。)テンプレートは、ビューが動的にページを表示するための情報を追加できる HTML のブロックです。(In Visual Studio 2017 15.7 and earlier, the file is contained directly under templates and step 2-4 instructs you to create the subfolder.) Templates are blocks of HTML into which views can add information to dynamically render a page. index.html 内の {{ content }} のようなページ テンプレート "変数" は、この記事で後述する動的な値のプレースホルダーです (手順 2)。Page template "variables," such as {{ content }} in index.html, are placeholders for dynamic values as explained later in this article (step 2). 通常、Django アプリは、アプリと名前が一致するサブフォルダーにテンプレートを配置することで、テンプレートの名前空間を作成します。Typically Django apps create a namespace for their templates by placing them in a subfolder that matches the app name.
admin.pyadmin.py アプリの管理インターフェイス (手順 6 を参照) を拡張する Python ファイル。データベース内のデータをシードして編集するために、使用されます。The Python file in which you extend the app's administrative interface (see step 6), which is used to seed and edit data in a database. 最初は、このファイルにはステートメント from django.contrib import admin のみが含まれています。Initially, this file contains only the statement, from django.contrib import admin. 既定では、Django には、Django プロジェクトの settings.py ファイルにあるエントリを介して標準の管理インターフェイスが含まれています。これらは、urls.py の既存のエントリのコメントを解除することで、有効にできます。By default, Django includes a standard administrative interface through entries in the Django project's settings.py file, which you can turn on by uncommenting existing entries in urls.py.
apps.pyapps.py アプリの構成クラスを定義する Python ファイル (この表の後に、以下を参照してください)。A Python file that defines a configuration class for the app (see below, after this table).
models.pymodels.py モデルとは、関数によって識別され、ビューがアプリの基本のデータベースを操作するために利用するデータ オブジェクトです (手順 6 を参照)。Models are data objects, identified by functions, through which views interact with the app's underlying database (see step 6). アプリがこれらの詳細との関連付けを行う必要がないように、Django はデータベース接続層を提供します。Django provides the database connection layer so that apps don't need to concern themselves with those details. models.py ファイルはモデルを作成するための既定の場所であり、最初はステートメント from django.db import models のみを含みます。The models.py file is a default place in which to create your models, and initially contains only the statement, from django.db import models.
tests.pytests.py 単体テストの基本構造を含む Python ファイル。A Python file that contains the basic structure of unit tests.
views.pyviews.py ビューは、通常は Web ページと見なされるものであり、HTTP 要求を取得して HTTP 応答を返します。Views are what you typically think of as web pages, which take an HTTP request and return an HTTP response. 一般的に、ビューは Web ブラウザーが表示方法を認識している HTML として表示されますが、ビューが必ずしも表示可能である必要はありません (中間フォームなど)。Views typically render as HTML that web browsers know how to display, but a view doesn't necessarily have to be visible (like an intermediate form). ビューは、HTML を表示してブラウザーに送信する役割を担う Python 関数によって定義されています。A view is defined by a Python function whose responsibility is to render the HTML to send to the browser. views.py ファイルはビューを作成するための既定の場所であり、最初はステートメント from django.shortcuts import render のみを含みます。The views.py file is a default place in which to create views, and initially contains only the statement, from django.shortcuts import render.

"HelloDjangoApp" という名前を使用した場合、app.py の内容は次のようになります。The contents of app.py appears as follows when using the name "HelloDjangoApp":

from django.apps import AppConfig

class HelloDjangoAppConfig(AppConfig):
    name = 'HelloDjango'

質問: Visual Studio で Django アプリを作成することは、コマンド ラインでアプリを作成することと、どう違うのですか。Question: Is creating a Django app in Visual Studio any different from creating an app on the command line?

回答: Django アプリ テンプレートを使って、[追加] > [Django アプリ] コマンドを実行するか、または [追加] > [新しい項目] を使用すると、Django コマンド manage.py startapp <app_name> の場合と同じファイルが作成されます。Answer: Running the Add > Django app command or using Add > New Item with a Django app template produces the same files as the Django command manage.py startapp <app_name>. Visual Studio でアプリを作成することの利点は、アプリ フォルダーとその中のすべてのファイルが自動的にプロジェクトに統合されることです。The benefit to creating the app in Visual Studio is that the app folder and all its files are automatically integrated into the project. 同じ Visual Studio コマンドを使用して、プロジェクト内に任意の数のアプリを作成できます。You can use the same Visual Studio command to create any number of apps in your project.

手順 2-2: Django プロジェクトからアプリを実行するStep 2-2: Run the app from the Django project

この時点で、Visual Studio のプロジェクトをもう一度実行すると (ツール バー ボタンまたは [デバッグ] > [デバッグの開始] を使用)、まだ既定のページが表示されます。At this point, if you run the project again in Visual Studio (using the toolbar button or Debug > Start Debugging), you still see the default page. アプリ固有のページを定義し、アプリを Django プロジェクトに追加する必要があるため、アプリのコンテンツは表示されません。No app content appears because you need to define an app-specific page and add the app to the Django project:

  1. HelloDjangoApp フォルダーで、以下のコードに合わせて views.py を変更します。コードでは、"index" という名前のビューを定義しています。In the HelloDjangoApp folder, modify views.py to match the code below, which defines a view named "index":

    from django.shortcuts import render
    from django.http import HttpResponse
    
    def index(request):
        return HttpResponse("Hello, Django!")
    
  2. BasicProject フォルダー (手順 1 で作成済み) で、少なくとも以下のコードに合わせて urls.py を変更します (お好みに合わせて、指示コメントはそのままにしておいてもかまいません)。In the BasicProject folder (created in step 1), modify urls.py to at least match the following code (you can retain the instructive comments if you like):

    from django.conf.urls import include, url
    import HelloDjangoApp.views
    
    # Django processes URL patterns in the order they appear in the array
    urlpatterns = [
        url(r'^$', HelloDjangoApp.views.index, name='index'),
        url(r'^home$', HelloDjangoApp.views.index, name='home'),
    ]
    

    各 URL パターンは、Django が固有のサイト相対 URL (つまり、https://www.domain.com/ に続く部分) のルーティング先にするビューを示します。Each URL pattern describes the views to which Django routes specific site-relative URLs (that is, the portion that follows https://www.domain.com/). 正規表現 ^$ から始まる urlPatterns の最初のエントリは、サイト ルート "/" に対するルーティングです。The first entry in urlPatterns that starts with the regular expression ^$ is the routing for the site root, "/". 2 つ目のエントリである ^home$ は、明示的に "/home" をルーティングします。The second entry, ^home$ specifically routes "/home". 同じビューに対して任意の数のルーティングを保持できます。You can have any number of routings to the same view.

  3. もう一度プロジェクトを実行すると、ビューに定義されたとおり、Hello, Django! というRun the project again to see the message Hello, Django! メッセージが表示されます。as defined by the view. 完了したら、サーバーを停止します。Stop the server when you're done.

ソース管理へのコミットCommit to source control

コードに変更を加え、テストが正常に終了したので、このタイミングで、変更を確認してソース管理に追加します。Because you've made changes to your code and have tested them successfully, now is a great time to review and commit your changes to source control. このチュートリアルの以降の手順で、ソース管理にコミットする適切なタイミングについてもう一度触れる機会があるので、このセクションに戻って参照してください。Later steps in this tutorial remind you of appropriate times to commit to source control again, and refer you back to this section.

  1. Visual Studio の下部にある変更ボタン (以下の円印) を選択すると、チーム エクスプローラーに移動します。Select the changes button along the bottom of Visual Studio (circled below), which navigates to Team Explorer.

    Visual Studio ステータス バーにあるソース管理の変更ボタン

  2. チーム エクスプローラーで "最初の Django アプリの作成" などのコミット メッセージを入力して、[Commit All](すべてコミットする) を選択します。In Team Explorer, enter a commit message like "Create initial Django app" and select Commit All. コミットが完了すると、"<hash> のコミットがローカルで作成されました。変更をサーバーと共有するには、同期を使用してください。" というメッセージが表示されます。When the commit is complete, you see a message Commit <hash> created locally. Sync to share your changes with the server. リモート リポジトリに変更をプッシュする場合は、[同期] を選択して、[出力方向のコミット] にある [プッシュ] を選択します。If you want to push changes to your remote repository, select Sync, then select Push under Outgoing Commits. リモートにプッシュする前に、複数のローカル コミットを蓄積しておくことも可能です。You can also accumulate multiple local commits before pushing to remote.

    チーム エクスプローラーでリモートにコミットをプッシュする

質問: ルーティング文字列の前にある 'r' というプレフィックスは何のためにあるのですか。Question: What is the 'r' prefix before the routing strings for?

回答: Python の文字列にある 'r' プレフィックスは "raw" (生) という意味で、文字列内のどの文字もエスケープしないよう Python に指示しています。Answer: The 'r' prefix on a string in Python means "raw," which instructs Python to not escape any characters within the string. 正規表現には多くの特殊文字が使用されるため、'r' プレフィックスの使用によって、多くの '\' エスケープ文字を含むよりもずっと文字列が読みやすくなります。Because regular expressions use many special characters, using the 'r' prefix makes those strings much easier to read than if they contained a number of '\' escape characters.

質問: URL ルーティング エントリでは、^ および $ 文字にどのような意味がありますか。Question: What do the ^ and $ characters mean in the URL routing entries?

回答: URL パターンを定義する正規表現では、^ は "行の開始" を意味し、$ は "行の終了" を意味します。ここでも、URL はサイト ルートへの相対 (https://www.domain.com/ の後に続く部分) です。Answer: In the regular expressions that define URL patterns, ^ means "start of line" and $ means "end of line," where again the URLs are relative to the site root (the part that follows https://www.domain.com/). 正規表現 ^$ は効果的に "空白" を意味するため、完全な URL https://www.domain.com/ (サイト ルートに何も追加されない) と一致します。The regular expression ^$ effectively means "blank" and therefore matches the full URL https://www.domain.com/ (nothing added to the site root). パターン ^home$https://www.domain.com/home/ と完全に一致します The pattern ^home$ matches exactly https://www.domain.com/home/. (Django では、パターン マッチングに末尾の / を使用しません)。(Django doesn't use the trailing / in pattern matching.)

^home のように、正規表現で末尾の $ を使用しない場合、URL パターンは "home"、"homework"、"homestead"、および "home192837" など、"home" で始まる任意の URL と一致します。If you don't use a trailing $ in a regular expression, as with ^home, then URL pattern matches any URL that begins with "home" such as "home", "homework", "homestead", and "home192837".

別の正規表現を使って実験するには、pythex.orgregex101.com のようなオンライン ツールを試行してください。To experiment with different regular expressions, try online tools such as regex101.com at pythex.org.

手順 2-3: HTML を使用してビューを表示するStep 2-3: Render a view using HTML

views.py に既にある index 関数では、ページに対するプレーンテキストの HTTP 応答以外は生成されません。The index function that you have so far in views.py generates nothing more than a plain-text HTTP response for the page. もちろん、現実のほとんどの Web ページは、ライブ データを頻繁に取り込む豊富な HTML ページを使って応答します。Most real-world web pages, of course, respond with rich HTML pages that often incorporate live data. 実際、関数を使用してビューを定義する主な理由は、ビューのコンテンツを動的に生成できるからです。Indeed, the primary reason to define a view using a function is so you can generate that content dynamically.

HttpResponse の引数は単に文字列なので、文字列内に自由に HTML を構築できます。Because the argument to HttpResponse is just a string, you can build up any HTML you like within a string. 単純な例としては、index 関数を次のコード (既存の from ステートメントを保持する) に置き換えます。これにより、ページを更新するたびに更新される動的コンテンツを使用する HTML 応答が生成されます。As a simple example, replace the index function with the following code (keeping the existing from statements), which generates an HTML response using dynamic content that's updated every time you refresh the page:

from datetime import datetime

def index(request):
    now = datetime.now()

    html_content = "<html><head><title>Hello, Django</title></head><body>"
    html_content += "<strong>Hello Django!</strong> on " + now.strftime("%A, %d %B, %Y at %X")
    html_content += "</body></html>"

    return HttpResponse(html_content)

もう一度プロジェクトを実行すると、"Hello Django!Run the project again to see a message like "Hello Django! on Monday, 16 April, 2018 at 16:28:10"(ようこそ、Django へ! 2018 年 4 月 16 日、月曜日の 16 時 28 分 10 秒)" のようなメッセージが表示されます。on Monday, 16 April, 2018 at 16:28:10". ページを更新すると時間が更新され、各要求によってコンテンツが生成されていることを確認できます。Refresh the page to update the time and confirm that the content is being generated with each request. 完了したら、サーバーを停止します。Stop the server when you're done.

Tip

プロジェクトの停止および再起動を行う簡単な方法として、[デバッグ] > [再起動] メニュー コマンド (Ctrl+Shift+F5 キー) を使用するか、または以下のデバッグ ツールバーの [再起動] ボタンを使用します。A shortcut to stopping and restarting the project is to use the Debug > Restart menu command (Ctrl+Shift+F5) or the Restart button on the debugging toolbar:

Visual Studio のデバッグ ツールバーにある再起動ボタン

手順 2-4: ページ テンプレートを使用してビューを表示するStep 2-4: Render a view using a page template

コードでの HTML の生成は、非常に小規模なページでは問題ありませんが、ページが複雑になると、通常は、ぺ―ジの静的な HTML 部分を "ページ テンプレート" として (CSS および JavaScript ファイルへの参照と併せて) 保守し、そこに動的なコード生成コンテンツを挿入したいと考えます。Generating HTML in code works fine for very small pages, but as pages get more sophisticated you typically want to maintain the static HTML parts of your page (along with references to CSS and JavaScript files) as "page templates" into which you then insert dynamic, code-generated content. 前のセクションでは、now.strftime 呼び出しの日時のみが動的であり、それ以外のすべての内容はページ テンプレートに配置できることを意味します。In the previous section, only the date and time from the now.strftime call is dynamic, which means all the other content can be placed in a page template.

Django ページ テンプレートは、{{ content }} 内と同様に、{{}} で区切られる "変数" という任意の数の置換トークンを含むことができる HTML のブロックです。A Django page template is a block of HTML that can contain any number of replacement tokens called "variables" that are delineated by {{ and }}, as in {{ content }}. Django のテンプレート モジュールは、コードで提供した動的コンテンツで変数を置き換えます。Django's templating module then replaces variables with dynamic content that you provide in code.

ページ テンプレートを使用する手順を次に示します。The following steps demonstrate the use of page templates:

  1. Django プロジェクトが格納されている BasicProject フォルダーの settings.py ファイルを開き、アプリ名 "HelloDjangoApp" を INSTALLED_APPS 一覧に追加します。Under the BasicProject folder, which contains the Django project, open settings.py file and add the app name, "HelloDjangoApp", to the INSTALLED_APPS list. アプリを一覧に追加すると、アプリを格納しているこの名前のフォルダーがあることが、Django プロジェクトに通知されます。Adding the app to the list tells the Django project that there's a folder of that name containing an app:

    INSTALLED_APPS = [
        'HelloDjangoApp',
        # Other entries...
    ]
    
  2. また、settings.py で、TEMPLATES オブジェクトに以下の行 (既定で組み込まれている) が含まれていることを確認します。この行は、インストールされたアプリの templates フォルダー内でテンプレートを検索するよう Django に指示します。Also in settings.py, make sure the TEMPLATES object contains the following line (included by default), which instructs Django to look for templates in an installed app's templates folder:

    'APP_DIRS': True,
    
  3. HelloDjangoApp フォルダーの templates/HelloDjangoApp/index.html ページ テンプレート ファイル (VS 2017 15.7 以前の場合、templates/index.html) を開き、{{ content }} という 1 つの変数が含まれていることを確認します。In the HelloDjangoApp folder, open the templates/HelloDjangoApp/index.html page template file (or templates/index.html in VS 2017 15.7 and earlier), to observe that it contains one variable, {{ content }}:

    <html>
    <head><title></title></head>
    
    <body>
    
    {{ content }}
    
    </body>
    </html>
    
  4. HelloDjangoApp フォルダーの views.py を開き、index 関数を django.shortcuts.render ヘルパー関数を使用する次のコードに置き換えます。In the HelloDjangoApp folder, open views.py and replace the index function with the following code that uses the django.shortcuts.render helper function. render ヘルパーは、ページ テンプレートを操作するために簡素化されたインターフェイスを提供しています。The render helper provides a simplified interface for working with page templates. 必ず、すべての既存の from ステートメントをそのまま保持します。Be sure to keep all existing from statements.

    from django.shortcuts import render   # Added for this step
    
    def index(request):
        now = datetime.now()
    
        return render(
            request,
            "HelloDjangoApp/index.html",  # Relative path from the 'templates' folder to the template file
            # "index.html", # Use this code for VS 2017 15.7 and earlier
            {
                'content': "<strong>Hello Django!</strong> on " + now.strftime("%A, %d %B, %Y at %X")
            }
        )
    

    見てわかるように、render の最初の引数は要求オブジェクトであり、その後ろにはアプリの templates フォルダー内の一時ファイルへの相対パスが続きます。The first argument to render, as you can see, is the request object, followed by the relative path to the template file within the app's templates folder. 必要に応じて、ビューに対応する名前を付けたテンプレートがサポートされます。A template file is named for the view it supports, if appropriate. render の 3 つ目の引数は、テンプレートが参照する変数のディクショナリです。The third argument to render is then a dictionary of variables that the template refers to. テンプレートの変数が {{ object.property }} を参照できる場合、ディクショナリにオブジェクトを含めることができます。You can include objects in the dictionary, in which case a variable in the template can refer to {{ object.property }}.

  5. プロジェクトを実行して、出力を確認します。Run the project and observe the output. 手順 2-2 で確認したものとほぼ同じメッセージが表示され、テンプレートが機能していることが示されます。You should see a similar message to that seen in step 2-2, indicating that the template works.

    ただし、content プロパティで使用した HTML がプレーン テキストとしてのみ表示されることを確認してください。render 関数は自動的にこの HTML をエスケープするためです。Observe, however, that the HTML you used in the content property renders only as plain text because the render function automatically escapes that HTML. 自動エスケープによって、インジェクション攻撃に対する偶発的な脆弱性を防ぎます。開発者は、1 つのページから入力を収集し、テンプレートのプレースホルダーを介して別のページの値として使用することがよくあります。Automatic escaping prevent accidental vulnerabilities to injection attacks: developers often gather input from one page and use it as a value in another through a template placeholder. エスケープは、HTML をコードとは別にページ テンプレートに保存する方法が最善であることを思い出すためにも役立ちます。Escaping also serves as a reminder that it's again best to keep HTML in the page template and out of the code. 幸いにも、必要に応じて追加の変数を作成することは簡単です。Fortunately, it's a simple matter to create additional variables where needed. たとえば、以下のマークアップに合うようにテンプレートindex.html を変更します。これにより、ページ タイトルが追加され、ページ テンプレートのすべての書式設定がそのまま保持されます。For example, change index.html with templates to match the following markup, which adds a page title and keeps all formatting in the page template:

    <html>
        <head>
            <title>{{ title }}</title>
        </head>
        <body>
            <strong>{{ message }}</strong>{{ content }}
        </body>
    </html>
    

    次に、ページ テンプレートのすべての変数の値を指定するために、index ビュー関数を以下のように記述します。Then write the index view function as follows, to provide values for all the variables in the page template:

    def index(request):
        now = datetime.now()
    
        return render(
            request,
            "HelloDjangoApp/index.html",  # Relative path from the 'templates' folder to the template file
            # "index.html", # Use this code for VS 2017 15.7 and earlier
            {
                'title' : "Hello Django",
                'message' : "Hello Django!",
                'content' : " on " + now.strftime("%A, %d %B, %Y at %X")
            }
        )
    
  6. サーバーを停止し、プロジェクトを再起動して、以下のようにページが適切に表示されることを確認します。Stop the server and restart the project, and observe that the page now renders properly:

    テンプレートを使用してアプリを実行する

  7. Visual Studio 2017 バージョン 15.7 以前: 最後の手順として、アプリと同じ名前のサブフォルダーにテンプレートを移動します。これにより、名前空間が作成され、プロジェクトに追加する可能性がある他のアプリとの潜在的な競合が回避されます。Visual Studio 2017 version 15.7 and earlier: As a final step, move your templates into a subfolder named the same as your app, which creates a namespace and avoids potential conflicts with other apps you might add to the project. (VS 2017 15.8+ のテンプレートはこれを自動的に行います。)つまり、templatesHelloDjangoApp という名前のサブフォルダーを作成し、そのサブフォルダーに index.html を移動して、テンプレートの新しいパスである HelloDjangoApp/index.html を参照するように index ビュー関数を変更します。(The templates in VS 2017 15.8+ do this for you automatically.) That is, create a subfolder in templates named HelloDjangoApp, move index.html into that subfolder, and modify the index view function to refer to the template's new path, HelloDjangoApp/index.html. 次に、プロジェクトを実行してページが正しく表示されることを確認し、サーバーを停止します。Then run the project, verify that the page renders properly, and stop the server.

  8. ソース管理への変更をコミットし、必要に応じて手順 2-2 の説明に従って、リモート リポジトリを更新します。Commit your changes to source control and update your remote repository, if desired, as described under step 2-2.

質問: ページ テンプレートを別個のファイルにする必要はありますか。Question: Do page templates have to be in a separate file?

回答: 多くの場合、テンプレートは別個の HTML ファイルになっていますが、インライン テンプレートも使用できます。Answer: Although templates are usually maintained in separate HTML files, you can also use an inline template. ただし、マークアップとコード間の明確な分離を維持するために、別個のファイルを使用することが推奨されています。Using a separate file is recommended, however, to maintain a clean separation between markup and code.

質問: テンプレートには、.html ファイルの拡張子を使用する必要がありますか。Question: Must templates use the .html file extension?

回答: render 関数の 2 つ目の引数にファイルへの正確な相対パスを常に指定するため、ページ テンプレート ファイルの .html 拡張子は完全にオプションです。Answer: The .html extension for page template files is entirely optional, because you always identify the exact relative path to the file in the second argument to the render function. ただし、Visual Studio (および、その他のエディター) では通常、.html ファイルでのコード補完や構文の色付けなどの機能を提供しており、このことは、ページ テンプレートが厳密に HTML ではないという事実よりも重要です。However, Visual Studio (and other editors) typically give you features like code completion and syntax coloration with .html files, which outweighs the fact that page templates are not strictly HTML.

実際に、Django プロジェクトを操作していると、Visual Studio では、編集中の HTML ファイルが実際には Django テンプレートである場合を自動検出して、特定のオートコンプリート機能を提供します。In fact, when you're working with a Django project, Visual Studio automatically detects when the HTML file you're editing is actually a Django template, and provides certain auto-complete features. たとえば、Django ページ テンプレートのコメント {# の入力を開始すると、Visual Studio では終了の #} 文字を自動的に提示します。For example, when you start typing a Django page template comment, {#, Visual Studio automatically gives you the closing #} characters. また、[選択範囲のコメント] および [選択範囲のコメントを解除] コマンド ([編集] > [詳細] メニューおよびツールバー上にある) では、HTML コメントではなく、テンプレート コメントを使用します。The Comment Selection and Uncomment Selection commands (on the Edit > Advanced menu and on the toolbar) also use template comments instead of HTML comments.

質問: プロジェクトを実行すると、テンプレートが見つからないというエラーが表示されます。Question: When I run the project, I see an error that the template cannot be found. 理由What's wrong?

回答: テンプレートが見つからないというエラーが表示される場合は、アプリを INSTALLED_APPS 一覧にある Django プロジェクトの settings.py に追加済みであることを確認してください。Answer: If you see errors that the template cannot be found, make sure you added the app to the Django project's settings.py in the INSTALLED_APPS list. そのエントリがない場合、Django ではアプリの templates フォルダー内の検索が認識されません。Without that entry, Django won't know to look in the app's templates folder.

質問: どうして、テンプレートの名前空間の設定が重要なのですか。Question: Why is template namespacing important?

回答: Django が render 関数で参照されるテンプレートを検索するとき、相対パスに一致する最初に検出した任意のファイルを使用します。Answer: When Django looks for a template referred to in the render function, it uses whatever file it finds first that matches the relative path. テンプレートに同じフォルダー構造を使用している複数の Django アプリが、同じプロジェクト内にある場合、1 つのアプリが意図せずに、もう 1 つのアプリのテンプレートを使用します。If you have multiple Django apps in the same project that use the same folder structures for templates, it's likely that one app will unintentionally use a template from another app. このようなエラーを回避するために、アプリの templates フォルダー内にアプリ名と一致するサブフォルダーを必ず作成して、あらゆる重複を防止してください。To avoid such errors, always create a subfolder under an app's templates folder that matches the name of the app to avoid any and all duplication.

次の手順Next steps

詳しい説明Go deeper