Django-url-mapping

提供:Dev Guides
移動先:案内検索

Django-URLマッピング

これで、前の章で説明した作業ビューができました。 URLを介してそのビューにアクセスする必要があります。 DjangoにはURLマッピングのための独自の方法があり、プロジェクトのurl.pyファイル*(myproject/url.py)*を編集することによって行われます。 url.pyファイルは次のようになります-

from django.conf.urls import patterns, include, url
from django.contrib import admin
admin.autodiscover()

urlpatterns = patterns('',
   #Examples
   #url(r'^$', 'myproject.view.home', name = 'home'),
   #url(r'^blog/', include('blog.urls')),

   url(r'^admin', include(admin.site.urls)),
)

ユーザーがWebアプリのページをリクエストすると、Djangoコントローラーが引き継いでurl.pyファイルを介して対応するビューを探し、見つからない場合はHTML応答または404 not foundエラーを返します。 url.pyで最も重要なのは "urlpatterns" タプルです。 URLとビューの間のマッピングを定義する場所です。 マッピングは、次のようなURLパターンのタプルです-

from django.conf.urls import patterns, include, url
from django.contrib import admin
admin.autodiscover()

urlpatterns = patterns('',
   #Examples
   #url(r'^$', 'myproject.view.home', name = 'home'),
   #url(r'^blog/', include('blog.urls')),

   url(r'^admin', include(admin.site.urls)),
   url(r'^hello/', 'myapp.views.hello', name = 'hello'),
)

マークされた行は、URL "/home"をmyapp/view.pyファイルで作成されたhelloビューにマッピングします。 上記のように、マッピングは3つの要素で構成されています-

  • パターン-解決およびマップするURLに一致する正規表現。 python 're’モジュールで動作するすべてのものがパターンに適格です(URL経由でパラメーターを渡す場合に便利です)。
  • ビューへのPythonパス-モジュールをインポートするときと同じです。
  • 名前-URLリバーシングを実行するには、上記の例で行われた名前付きURLパターンを使用する必要があります。 完了したら、サーバーを起動してビューにアクセスします:http://127.0.0.1/hello

URLを整理する

これまで、「myprojects/url.py」ファイルにURLを作成しましたが、Djangoとアプリの作成について前述したように、最良のポイントは異なるプロジェクトでアプリケーションを再利用できるようにすることでした。 すべてのURLを「projecturl.py」ファイルに保存すると、問題が簡単にわかります。 したがって、ベストプラクティスは、アプリケーションごとに「url.py」を作成し、それをメインプロジェクトのurl.pyファイルに含めることです(以前に管理インターフェイスの管理URLを含めました)。

URLの整理

どうですか?

私たちは、次のコードを使用してmyappでurl.pyファイルを作成する必要があります-

from django.conf.urls import patterns, include, url

urlpatterns = patterns('', url(r'^hello/', 'myapp.views.hello', name = 'hello'),)

その後、myproject/url.pyは次のように変更されます-

from django.conf.urls import patterns, include, url
from django.contrib import admin
admin.autodiscover()

urlpatterns = patterns('',
   #Examples
   #url(r'^$', 'myproject.view.home', name = 'home'),
   #url(r'^blog/', include('blog.urls')),

   url(r'^admin', include(admin.site.urls)),
   url(r'^myapp/', include('myapp.urls')),
)

myappアプリケーションのすべてのURLが含まれています。 「/hello」を介してアクセスされたホームルは「/myapp/hello」になりました。これは、Webアプリにとってよりよく理解しやすい構造です。

Myproject

ここで、myapp“ morning”に別のビューがあり、myapp/url.pyにマップしたい場合、myapp/url.pyを次のように変更します。

from django.conf.urls import patterns, include, url

urlpatterns = patterns('',
   url(r'^hello/', 'myapp.views.hello', name = 'hello'),
   url(r'^morning/', 'myapp.views.morning', name = 'morning'),
)

これはリファクタリングすることができます-

from django.conf.urls import patterns, include, url

urlpatterns = patterns('myapp.views',
   url(r'^hello/', 'hello', name = 'hello'),
   url(r'^morning/', 'morning', name = 'morning'),)

ご覧のとおり、 urlpatterns タプルの最初の要素を使用しています。 これは、アプリ名を変更する場合に便利です。

URLパターン

ビューへのパラメーターの送信

URLをマップする方法、それらを整理する方法、そしてビューにパラメーターを送信する方法を見てみましょう。 古典的なサンプルは記事の例です(「/articles/article_id」から記事にアクセスしたい)。

パラメータの受け渡しは、URLパターンで regexp を使用してキャプチャすることにより行われます。 「myapp/view.py」に次のようなビューがある場合

from django.shortcuts import render
from django.http import HttpResponse

def hello(request):
   return render(request, "hellol", {})

def viewArticle(request, articleId):
   text = "Displaying article Number : %s"%articleId
   return HttpResponse(text)

「/myapp/article/articleId」からアクセスできるようにmyapp/url.pyにマッピングしたいので、「myapp/url.py」に次のものが必要です-

from django.conf.urls import patterns, include, url

urlpatterns = patterns('myapp.views',
   url(r'^hello/', 'hello', name = 'hello'),
   url(r'^morning/', 'morning', name = 'morning'),
   url(r'^article/(\d+)/', 'viewArticle', name = 'article'),)

Djangoがurlを表示するとき:“/myapp/article/42”それはviewArticleビューにパラメーター '42’を渡し、ブラウザーで次の結果を得るはずです-

viewArticleにパラメーターを渡す

ここではパラメーターの順序が重要であることに注意してください。 1年の1か月の記事のリストが必要な場合、viewArticlesビューを追加しましょう。 view.pyは次のようになります-

from django.shortcuts import render
from django.http import HttpResponse

def hello(request):
   return render(request, "hellol", {})

def viewArticle(request, articleId):
   text = "Displaying article Number : %s"%articleId
   return HttpResponse(text)

def viewArticle(request, month, year):
   text = "Displaying articles of : %s/%s"%(year, month)
   return HttpResponse(text)

対応する url.py ファイルは次のようになります-

from django.conf.urls import patterns, include, url

urlpatterns = patterns('myapp.views',
   url(r'^hello/', 'hello', name = 'hello'),
   url(r'^morning/', 'morning', name = 'morning'),
   url(r'^article/(\d+)/', 'viewArticle', name = 'article'),
   url(r'^articles/(\d{2})/(\d{4})', 'viewArticles', name = 'articles'),)

「/myapp/articles/12/2006/」に移動すると、「Displaying article of:2006/12」が表示されますが、パラメータを逆にすると同じ結果は得られません。

記事の表示

これを回避するために、URLパラメーターをビューパラメーターにリンクすることができます。 そのため、 url.py は次のようになります-

from django.conf.urls import patterns, include, url

urlpatterns = patterns('myapp.views',
   url(r'^hello/', 'hello', name = 'hello'),
   url(r'^morning/', 'morning', name = 'morning'),
   url(r'^article/(\d+)/', 'viewArticle', name = 'article'),
   url(r'^articles/(?P\d{2})/(?P\d{4})', 'viewArticles', name = 'articles'),)