В онлайн-курсе 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()
чтобы начать нас с? Или это разные инструменты для разных работ?
python
django
django-urls
FrostedCookies
источник
источник
path()
иurl()
. Если вы хотите или вам нужно использовать регулярные выражения, вы должны использоватьre_path()
илиurl()
. Кроме того, я думаю, что действительно вам решать, какой из них вы выберете.Ответы:
Из документации Django для url
Ключевое различие между
path
иre_path
заключается в том, чтоpath
использует маршрут без регулярного выраженияВы можете использовать
re_path
для сложных вызовов регулярных выражений и использовать толькоpath
для более простых поисковисточник
re_path
это то, что я ищу тогда.Новая
django.urls.path()
функция позволяет использовать более простой и понятный синтаксис маршрутизации URL-адресов. Например, этот пример из предыдущих выпусков Django:можно было бы записать как:
django.conf.urls.url()
Функция из предыдущих версий теперь доступнаdjango.urls.re_path()
. Старое расположение остается для обратной совместимости без неминуемого прекращения поддержки. Стараяdjango.conf.urls.include()
функция теперь доступна для импорта,django.urls
поэтому вы можете использовать:в URLconfs . Для дальнейшего чтения django doc
источник
path()
пример допускает числа, не являющиеся четырехзначными./<int:year>/
означает , что год должен быть в целое число, я предлагаю вам ознакомиться с официальной документацией.int
не эквивалентен[0-9]{4}
. Используется ли он для целых чисел или нет, не имеет отношения к этой связи. Возможно, если вы замените его[0-9]{4}
на[0-9]+
свое сравнение, оно будет менее неточным, хотя вам все равно придется иметь дело с типом конечного результата (str vs int?).path
просто новинка в Django 2.0, выпущенном всего пару недель назад. Большинство руководств не обновлялось с учетом нового синтаксиса.Определенно предполагалось, что это будет более простой способ делать вещи; Я бы не сказал, что URL-адрес более мощный, вы должны иметь возможность выражать шаблоны в любом формате.
источник
Регулярные выражения, похоже, не работают с
path()
функцией со следующими аргументами:path(r'^$', views.index, name="index")
.Должно получиться так:
path('', views.index, name="index")
.Чтобы ввести регулярное выражение, первый аргумент должен быть пустым.
источник
Путь - это новая функция Django 2.0. Объясняется здесь: https://docs.djangoproject.com/en/2.0/releases/2.0/#whats-new-2-0
Похоже на более питонический способ и разрешите не использовать регулярное выражение в аргументе, который вы передаете для просмотра ... вы можете использовать функцию int (), например.
источник
Начиная с версии 2.0 многие пользователи используют путь, но мы можем использовать либо путь, либо URL-адрес. Например, в django 2.1.1 сопоставление функций через URL-адрес можно выполнить следующим образом
где сообщения - это приложение, а post_home - это функция в views.py
источник