English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
前の章で説明したように、私たちには機能するビューがあります。私たちはそのビューに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
これまでに「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'),)