it-swarm.com.ru

Что лучше использовать path () или 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() вместо, например:

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(), чтобы начать с нами? Или это разные инструменты для разных работ?

65
FrostedCookies

Из документации Django для url

url(regex, view, kwargs=None, name=None) Эта функция является псевдонимом Django.urls.re_path(). Вероятно, будет устарела в будущий выпуск.

Основное различие между path и re_path в том, что path использует маршрут без регулярных выражений 

Вы можете использовать re_path для сложных вызовов регулярных выражений и использовать просто path для более простых поисков

88
iklinac

Новая функция 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

31
silva blaze

path просто новый в Django 2.0, который был выпущен только пару недель назад. Большинство учебных пособий не будут обновлены для нового синтаксиса.

Это, конечно, должен был быть более простой способ делать вещи; Я бы не сказал, что URL более мощный, вы должны быть в состоянии выразить шаблоны в любом формате.

15
Daniel Roseman

Путь - это новая функция Django 2.0 . Объясненная здесь: https://docs.djangoproject.com/en/2.0/releases/2.0/#whats-new-2-0

Выглядят как более Pythonic, и позволяют не использовать регулярные выражения в аргументе, который вы передаете для просмотра ... вы можете использовать функцию int () для примера.

6
Denis Cottin

Регулярные выражения не работают с функцией path() со следующими аргументами: path(r'^$', views.index, name="index").

Должно быть так: path('', views.index, name="index").

1-й аргумент должен быть пустым для ввода регулярного выражения.

4
Danish Shaikh

Начиная с версии 2.0 многие пользователи используют path, но мы можем использовать либо path, либо 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

0
Nani Chintha