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 : ru.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-модель соответствия resembles tuple −
# Filename : example.py # Copyright : 2020 By w3codebox # Author by : ru.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" к просмотру Hello, созданному в файле myapp/view.py. Как вы видите, маппинг состоит из трех элементов -
Модели - это регулярное выражение, которое соответствует URL и его маппингу. Работает с Python 're' модуль, все, что соответствует этому шаблону (очень полезно, если вы хотите передавать параметры через URL). Путь к просмотру от python - в то же время, как вы импортируете модуль. Название - для выполнения URL-обратного преобразования необходимо использовать命名 URL-модели для выполнения примеров выше. После этого запустите сервер и доступ к вашему просмотру через следующий URL: http://127.0.0.1/hello
До сих пор мы создали URL для файла 'myprojects/url.py', но, как было сказано ранее о Django, лучше всего создавать приложение, которое можно повторно использовать в различных проектах. Таким образом, можно легко увидеть, что проблема заключается в том, чтобы сохранить все адреса в файле 'projecturl.py'. Поэтому лучше всего создать 'url.py' для каждого приложения и включить его в наш основной файл url.py (включая URL для управления интерфейсом в нашей основной url.py).
Нам нужно использовать следующий код, чтобы создать файл urls.py в папке myapp (myapp/urls.py) -
# Filename : example.py # Copyright : 2020 By w3codebox # Author by : ru.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 : ru.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)), )
Мы включили все URL-адреса приложения myapp. Это достигается через доступ к home.html для «/hello», теперь это «/myapp/hello», что является лучшей и более понятной структурой Web-приложения.
Создайте еще один файл вида: C:\myproject\templates\myapp\hello.html, содержимое которого будет следующим:
# Filename : example.py # Copyright : 2020 By w3codebox # Author by : ru.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>
Теперь imagine, что у нас есть другой вид в «myapp» под именем «morning», и мы хотим, чтобы он был связан с myapp/url.py, затем мы изменим наш myapp/url.py на −
# Filename : example.py # Copyright : 2020 By w3codebox # Author by : ru.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 : ru.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-адреса, как их организовывать, давайте посмотрим, как передавать параметры в вид.
Параметры передаются через регулярное выражение URL-модели. Если у нас есть подобный вид, «myapp/view.py»
# Filename : example.py # Copyright : 2020 By w3codebox # Author by : ru.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», нам нужно определить в следующем −
# Filename : example.py # Copyright : 2020 By w3codebox # Author by : ru.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. Код в file.py изменяется на −
# Filename : example.py # Copyright : 2020 By w3codebox # Author by : ru.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 : ru.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 : ru.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'),)