Лучше ли использовать путь() или url() в urls.py для django 2.0?
В онлайн-курсе django преподаватель использует функцию url()
для вызова представлений и использования регулярных выражений в списке urlpatterns. Я видел другие примеры на youtube этого.
например.
from django.contrib import admin
from django.urls import include
from django.conf.urls import url
urlpatterns = [
path('admin/', admin.site.urls),
url(r'^polls/', include('polls.urls')),
]
#and in polls/urls.py
urlpatterns = [
url(r'^$', views.index, name="index"),
]
Однако при просмотре учебника Django они используют path()
, а не e.g.:
from django.urls import path
from . import views
urlpatterns = [
path('', views.index, name="index"),
]
Кроме того, регулярные выражения, похоже, не работают с функцией path()
, так как использование path(r'^$', views.index, name="index")
не найдет представление mysite.com/polls/
.
Использует path()
без регулярного выражения, подходящего для дальнейшего продвижения вперед? Является url()
более мощным, но более сложным, поэтому они используют path()
, чтобы начать с нас? Или это случай различных инструментов для разных заданий?
Ответы
Ответ 1
Из документации Django для URL
url(regex, view, kwargs=None, name=None)
Эта функция является псевдонимом django.urls.re_path()
. Скорее всего, это не рекомендуется в будущем выпуске.
Ключевое различие между path
и re_path
том, что path
использует маршрут без регулярных выражений
Вы можете использовать re_path
для сложных вызовов регулярных выражений и использовать просто path
для более простых поисков
Ответ 2
Новая django.urls.path()
обеспечивает более простой и читаемый синтаксис маршрутизации URL. Например, этот пример из предыдущих выпусков Django:
url(r'^articles/(?P<year>[0-9]{4})/$', views.year_archive)
может быть написано как:
path('articles/<int:year>/', views.year_archive)
Функция django.conf.urls.url()
из предыдущих версий теперь доступна как django.urls.re_path()
. Старое местоположение остается для обратной совместимости, без неминуемого износа. Старая django.conf.urls.include()
теперь импортируется из django.urls
поэтому вы можете использовать:
from django.urls import include, path, re_path
в URLconfs. Для дальнейшего чтения Django Doc
Ответ 3
path
является просто новым в Django 2.0, который был выпущен только пару недель назад. Большинство учебных пособий не будут обновлены для нового синтаксиса.
Конечно, это был более простой способ делать вещи; Я бы не сказал, что URL-адрес более мощный, но вы должны иметь возможность выражать шаблоны в любом формате.
Ответ 4
Path - это новая функция Django 2.0. Объясняется здесь: https://docs.djangoproject.com/en/2.0/releases/2.0/#whats-new-2-0
Выглядит как более питонический способ и позволяет не использовать регулярное выражение в аргументе, который вы передаете для просмотра... вы можете использовать функцию int() для примера.
Ответ 5
Регулярные выражения, похоже, не работают с функцией path()
со следующими аргументами: path(r'^$', views.index, name="index")
.
Это должно быть так: path('', views.index, name="index")
.
Первый аргумент должен быть пустым, чтобы ввести регулярное выражение.
Ответ 6
Начиная с версии 2.0 многие пользователи используют путь, но мы можем использовать либо путь, либо URL. Например, в django 2.1.1 отображение на функции через url может быть сделано следующим образом
from django.contrib import admin
from django.urls import path
from django.contrib.auth import login
from posts.views import post_home
from django.conf.urls import url
urlpatterns = [
path('admin/', admin.site.urls),
url(r'^posts/$', post_home, name='post_home'),
]
где posts - это приложение, а post_home - функция в views.py