django 2.0의 경우 urls.py에서 path () 또는 url ()을 사용하는 것이 더 낫습니까?


131

장고 온라인 과정에서 강사는이 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()와 함께 우리를 시작? 아니면 다른 직업을위한 다른 도구일까요?


2
당신이 자습서를 다음과 같은 경우, 내가 전환 할 때 실수를 방지하기 위해, 어느 스타일 튜토리얼 사용을 사용 path()하고 url(). 당신이 원하는 또는 필요 사용 정규 표현식에에 경우에, 당신은 사용해야합니다 re_path()또는 url(). 그 이상, 나는 당신이 선택한 것이 당신에게 달려 있다고 생각합니다.
Alasdair

답변:


174

URL에 대한 Django 설명서에서

url(regex, view, kwargs=None, name=None)이 함수는의 별칭 django.urls.re_path()입니다. 향후 릴리스에서는 더 이상 사용되지 않을 것입니다.

사이의 키 차이 path와는 re_pathpath정규식없이 사용 경로

re_path복잡한 정규식 호출에 사용 path하고 더 간단한 조회 에만 사용할 수 있습니다


1
자세한 정보 감사합니다! re_path그때 내가 찾고있는 것입니다.
FrostedCookies

65

새로운 django.urls.path()기능은 더 간단하고 읽기 쉬운 URL 라우팅 구문을 허용합니다. 예를 들어, 이전 장고 릴리스의이 예는 다음과 같습니다.

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

URLconf는 . 장고 박사 를 더 읽으 려면


10
귀하의 path()예는 4 자리가 아닌 숫자를 허용 하기 때문에 약간의 오도 입니다.
BrainCore

/<int:year>/해 정수에 있어야 의미, 난 당신이 공식 문서를 통해 보는 것이 좋습니다.
Sylvernus Akubo

2
@silvablaze BrainCore에서 언급했듯이와 int같지 않습니다 [0-9]{4}. 정수에 사용되는지 여부는이 관계와 관련이 없습니다. 아마도 최종 결과의 유형 (str vs int?)을 처리해야 할 수도 있지만 비교 로 대체 [0-9]{4}한 경우 [0-9]+정확도가 떨어질 수 있습니다.
Jan Kyu Peblik

그것은 주제에 대한 명확한 답입니다. 감사.
VikasBhat

19

pathDjango 2.0의 새로운 기능으로 몇 주 전에 출시되었습니다. 대부분의 자습서는 새로운 구문으로 업데이트되지 않았습니다.

그것은 일을하는 더 간단한 방법이어야했다. URL이 더 강력하다고 말하지는 않지만 두 가지 형식으로 패턴을 표현할 수 있어야합니다.


9

정규 표현식은 path()다음 인수로 함수 에서 작동하지 않는 것 같습니다 path(r'^$', views.index, name="index")..

다음과 같아야합니다 path('', views.index, name="index")..

정규식을 입력하려면 첫 번째 인수를 비워 두어야합니다.


2
예, 위에서 지적한 것처럼 RE를 사용하려면 re_path () 함수를 대신 사용해야합니다.
FrostedCookies


2

v2.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의 함수입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.