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 : ko.oldtoolbag.com # Date : 2020-08-08 from django.conf.urls import patterns, include, url django.contrib를 가져오기 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 : ko.oldtoolbag.com # Date : 2020-08-08 from django.conf.urls import patterns, include, url django.contrib를 가져오기 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 표시 줄 매핑 URL "/"home"을 "myapp"로/ view.py 파일에서 생성된 Hello 뷰. 위의 매핑은 세 가지 요소로 구성되어 있습니다 -
패턴-URL을 해석하고 매핑하는 정규 표현식. python 're' 모듈과 함께 작동하는 모든 패턴(URL을 통해 매개변수를 전달하려고 할 때 매우 유용합니다). python으로 뷰의 경로-모듈을 가져오는 때와 같은 경로. 이름-URL 반전을 수행하려면 URL 패턴의 이름을 사용해야 합니다. 이렇게 하면 서버를 시작하고 다음 URL을 통해 뷰에 접근할 수 있습니다: http://127.0.0.1/hello
현재까지 'myprojects'를 생성했습니다/url.py 파일의 URL을 사용하여 각应用程序의 'url.py'를 생성하는 것이 좋습니다. 이렇게 하면 다른 프로젝트에서도 재사용할 수 있으며, 문제를 쉽게 파악할 수 있습니다. 또한, 'projecturl.py' 파일에 모든 URL을 저장하려면 이렇게 해야 합니다. 따라서, 각应用程序의 'url.py'를 생성하고, 주 프로젝트의 url.py 파일에 포함하여 관리 인터페이스에서 URL을 관리하는 것이 좋습니다.
myapp 폴더에 urls.py 파일을 생성하기 위해 다음 코드를 사용해야 합니다(myapp/urls.py) −
# Filename : example.py # Copyright : 2020 By w3codebox # Author by : ko.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 : ko.oldtoolbag.com # Date : 2020-08-08 from django.conf.urls import patterns, include, url django.contrib를 가져오기 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”는 웹 애플리케이션의 더 나은이자 이해하기 쉬운 구조입니다.
또 하나의 뷰 파일을 생성해 보겠습니다: C:\myproject\templates\myapp\hello.html, 그 내용은 다음과 같습니다:
# Filename : example.py # Copyright : 2020 By w3codebox # Author by : ko.oldtoolbag.com # Date : 2020-08-08 <html> <head> <meta http-equiv="content-type="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를 −
# Filename : example.py # Copyright : 2020 By w3codebox # Author by : ko.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 : ko.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 : ko.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 : ko.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 : ko.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 : ko.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 : ko.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'),)