Лучше ли использовать путь() или 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