English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Django URLマッピング

前の章で説明したように、私たちには機能するビューがあります。私たちはそのビューにURLでアクセスしたいと考えています。Djangoは独自のURLマッピング方法を持っています。今、プロジェクトのurl.pyファイルを編集します(myproject/url.py)が完了しました。url.py ファイルの内容は以下のようです:

# Filename : example.py
# Copyright : 2020 By w3codebox
# Author by : ja.oldtoolbag.com
# Date : 2020-08-08
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)),
 )  , 'myproject.view.home', name = 'home'),
    #url(r'^blog/', include('blog.urls')),
    url(r'^admin', include(admin.site.urls)),
 )

ユーザーがネットワークアプリケーションからページのリクエストを送信すると、Djangoコントローラーがurl.pyファイルを通じて対応するビューを探し、HTMLレスポンスを返します。如果没有找到,则返回404エラーメッセージが見つかりません。最も重要なのは「urlpatterns」メタデータのタプルです。これはURLとビュー間のマッピングを定義します。マッピングのURLパターンはタプルのようです

# Filename : example.py
# Copyright : 2020 By w3codebox
# Author by : ja.oldtoolbag.com
# Date : 2020-08-08
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'),
 )  , '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" から/ view.pyファイルで作成されたHelloビューです。上記のマッピングは3つの要素から成り立っています -

パターン−URLを解決およびマッピングするための正規表現です。pythonの「re」モジュールと連携できるすべてのパターンが適用できます(URLを通じてパラメータを渡したい場合に非常に便利です)。 pythonのビューへのパス−モジュールをインポートする際と同じです。 名前−URL反転を実行するために、URLパターンの命名を使用する必要があります。これを行った後、サーバーを起動し、以下のURLでビューにアクセスしてください:http://127.0.0.1/hello

URLを整理

これまでに「myprojects/url.py”ファイルのURLですが、前述のDjangoの説明によると、アプリケーションを作成する際には、異なるプロジェクトで再利用できるようにすることが望ましいです。 そうすることで、問題が何かを簡単に確認できます。また、「projecturl.py」ファイルにすべてのURLを保存したい場合もあります。 したがって、各アプリケーション用の「url.py」を作成し、それをメインプロジェクトの url.py ファイルに含め(管理インターフェースで管理するURLの前に含めます)、それが最善の方法です。

それはどのように行われますか?

以下のコードを使用して、myapp フォルダー内に urls.py ファイルを作成する必要があります(myapp/urls.py) −

# Filename : example.py
# Copyright : 2020 By w3codebox
# Author by : ja.oldtoolbag.com
# Date : 2020-08-08
from django.conf.urls import patterns, include, url
 urlpatterns = patterns('', url(r'^hello/', 'myapp.views.hello', name = 'hello'),)

myproject/urls.py を以下のように変更します-

# Filename : example.py
# Copyright : 2020 By w3codebox
# Author by : ja.oldtoolbag.com
# Date : 2020-08-08
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)),
 )  , '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を含めました。これは、home.htmlにアクセスすることで「/hello”,今は「/myapp/hello” 、これはWebアプリケーションのより良いそしてより簡単に理解できる構造です。

再创建一个视图ファイル:C:\myproject\templates\myapp\hello.html、その内容は以下の通りです:

# Filename : example.py
# Copyright : 2020 By w3codebox
# Author by : ja.oldtoolbag.com
# Date : 2020-08-08
<html>
 <head>
   <meta http-equiv="content-type" content="text/html; charset=utf-8>
   <title>Hello </title>
   <meta name="robots" content="NONE,NOARCHIVE">
   </style>
 </head>
     <body>
         <h2>Welcome to w3codebox .</h2>
         <p>This is my first Django App</p>
     <body>
 </html>

今、myappの「morning」の別のビューについて想像してみましょう。私たちは、そのビューがmyappにマッピングされることを望んでいます。/url.py、次に私たちのmyapp/url.py to −

# Filename : example.py
# Copyright : 2020 By w3codebox
# Author by : ja.oldtoolbag.com
# Date : 2020-08-08
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'),
 )

これは以下のようにリファクタリングできます −

# Filename : example.py
# Copyright : 2020 By w3codebox
# Author by : ja.oldtoolbag.com
# Date : 2020-08-08
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,如何组织他们,现在就让我们来看看如何将参数传递给视图。一个经典的文章实例(您要访问文章到/articles/article_id())。

传递参数是通过URL模式正则表达式捕捉它们完成的。如果我们有类似以下的视图/view.py

# Filename : example.py
# Copyright : 2020 By w3codebox
# Author by : ja.oldtoolbag.com
# Date : 2020-08-08
from django.shortcuts import render
 from django.http import HttpResponse
 def hello(request):
    return render(request, "hello.html", {})
 def viewArticle(request, articleId):
    text = "Displaying article Number: %s"%articleId
    return HttpResponse(text)

我们想把它映射放在myapp/urls.py,所以我们可以通过/myapp/article/articleId 访问, 我们需要在下列/urls.py 定义−

# Filename : example.py
# Copyright : 2020 By w3codebox
# Author by : ja.oldtoolbag.com
# Date : 2020-08-08
from django.conf.urls import url
 from . import views
 urlpatterns = [
     url(r'^hello', views.hello, name='hello'),
     url(r'^article/(\d+)/', views.viewArticle, name='article'), 
     url(r'^', views.index, name='index'),
 ], views.index, name='index'),
 ]


当Django会看到URL:/myapp/article/42”,它将传递参数42到viewArticle视图,在浏览器中,应该得到以下结果 -

注意,参数的顺序这里是很重要的。假设我们希望查看一年中某个一个月的文章列表,现在添加一个 viewArticles 视图。 view.py 代码变为 -

# Filename : example.py
# Copyright : 2020 By w3codebox
# Author by : ja.oldtoolbag.com
# Date : 2020-08-08
from django.shortcuts import render
 from django.http import HttpResponse
 def hello(request):
    return render(request, "hello.html", {})
 def viewArticle(request, articleId):
    text = "Displaying article Number: %s"%articleId
    return HttpResponse(text)
 def viewArticles(request, month, year):
    text = "Displaying articles of: %s"/%s"%(year, month)
    return HttpResponse(text)

対応する myapp/urls.py ファイルは以下のようになります −

# Filename : example.py
# Copyright : 2020 By w3codebox
# Author by : ja.oldtoolbag.com
# Date : 2020-08-08
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'),)

今、http:にアクセスするとき//localhost:8000/myapp/articles/12/2015/、'Displaying articles of:' 2015/12「 ,しかしパラメータを変換すると同じ結果は得られません。

このような状況を避けるため、URLパラメータがビューのパラメータにリンクされる可能性があります。したがって、url.pyは以下のようになります -

# Filename : example.py
# Copyright : 2020 By w3codebox
# Author by : ja.oldtoolbag.com
# Date : 2020-08-08
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'),)