Django 경로 제어 구현 코드
URL 은 웹 서비스의 길목 입 니 다.사용자 가 브 라 우 저 를 통 해 보 내 는 모든 요청 은 지정 한 URL 주소 로 보 내 지고 응답 합 니 다.
django 프로젝트 의 작성 경 로 는 우리 가 어떤 URL 을 받 았 는 지 외부 로 노출 하 는 것 입 니 다.그 밖 에 어떠한 URL 도 처리 되 지 않 습 니 다.URL 경 로 는 웹 서비스 가 외부 로 노출 된 API 입 니 다.
2.Django 처리 요청
사용 할 URL conf 모듈 을 확인 합 니 다.보통 settings 에서 ROOTURLCONF 가 설정 한 값 입 니 다.들 어 오 는 HttpRequest 대상 이 urlconf 속성(미들웨어 설정)이 있 으 면 settings 의 ROOT 대신 값 을 사용 합 니 다.URLCONF
Django 모듈 을 불 러 오고 사용 가능 한 urlpatterns 를 찾 습 니 다.django.conf.urls.url()인 스 턴 스 의 목록 입 니 다.
모든 URL 모드 를 순서대로 실행 하면 매 칭 이 성공 하면 멈 추기 때문에 순서 가 중요 합 니 다.
주어진 보 기 를 성공 적 으로 가 져 왔 습 니 다.python 함수 나 클래스 기반 보기 입 니 다.보 기 는 다음 과 같은 인 자 를 얻 을 수 있 습 니 다.
3.간단 한 경로 설정
from django.conf.urls import url
urlpatterns=[
url( ,view , , )
]
예제 URL conf:
from django.urls import url
from . import views
urlpatterns = [
url(r'^articles/2003/$', views.special_case_2003),
url(r'^articles/([0-9]{4})/$', views.year_archive),
url(r'^articles/([0-9]{4})/([0-9]{2})/$', views.month_archive),
url(r'^articles/([0-9]{4})/([0-9]{2})/([0-9]+)/$', views.article_detail),
]
주:/articles/2005/03/목록 의 세 번 째 모드 와 일치 합 니 다.Django 는 함수 views.month 를 호출 합 니 다.archive(request, '2005', '03')。
/articles/2005/3/는 URL 모드 와 일치 하지 않 습 니 다.목록 의 세 번 째 모드 는 달 에 두 개의 숫자 를 요구 하기 때 문 입 니 다.
/articles/2003/일치 목록 의 첫 번 째 모드 는 두 번 째 모드 가 아 닙 니 다.모드 가 순서대로 위 에서 아래로 일치 하기 때문에 첫 번 째 모드 가 먼저 일치 합 니 다.Django 는 함수 views.special 를 호출 합 니 다.case_2003(request)
/articles/2003 은 모든 모드 가 URL 이 슬 래 쉬 로 끝 나 는 것 을 요구 하기 때문에 어떠한 모드 와 도 일치 하지 않 습 니 다.
/articles/2003/03/03 은 마지막 모드 와 일치 합 니 다.Django 는 함수 views.article 를 호출 합 니 다.detail(request, '2003', '03', '03')。
URL 접근 주소 뒤에/경로 가 있 는 설정 항목 으로 이동 하지 않 을 지 여부 입 니 다.
APPEND_SLASH=True
Django settings.py 프로필 에는 기본적으로 APPEND 가 없습니다.SLASH 라 는 매개 변 수 는 Django 기본 매개 변 수 는 APPEND 입 니 다.SLASH = True。 그 역할 은 자동 으로 사이트 끝 에'/'를 추가 하 는 것 이다.유명 하 다
유명한 그룹의 문법 은(?P
이름 있 는 그룹 으로 URL conf 다시 쓰기:
from django.conf.urls import url
from . import views
urlpatterns = [
url(r'^articles/2003/$', views.special_case_2003),
url(r'^articles/(?P<year>[0-9]{4})/$', views.year_archive),
url(r'^articles/(?P<year>[0-9]{4})/(?P<month>[0-9]{2})/$', views.month_archive),
url(r'^articles/(?P<year>[0-9]{4})/(?P<month>[0-9]{2})/(?P<day>[0-9]{2})/$', views.article_detail),
]
주:캡 처 한 값 은 위치 매개 변수 가 아 닌 키워드 매개 변수 로 보기 함수 에 전 달 됩 니 다./articles/2005/03/views.month 호출 요청archive(request,year='2005',month='03')함수,views.month 가 아 닙 니 다.archive(request, '2005', '03') 。
5.무명 분조 유명 분조 총화
1.무명 그룹
위치 에 따라 인삼 을 전달 하 다.
그룹 을 나 눈 후 그룹 을 나 눈 데 이 터 를 위치 로 보기 함수 에 전달 하기 때문에 보기 함 수 는 형 삼 을 정의 해 야 합 니 다.
예시:
url:
(r'^articles/([0-9]{4})/([0-9]{2})$', views.article_detail)
보기 함수: def article_detail(request,*args)
2.유명 그룹키워드 에 따라 참조 하 다.
그룹 을 나 눈 후 그룹 을 나 눈 데 이 터 를 키워드 매개 변수 로 보기 함수 에 전달 하기 때문에 보기 함 수 는 형 삼,형 삼 이름과 그룹의 이름 을 정의 해 야 합 니 다.순서 와 무관 합 니 다.
예시:
url:
(r'^articles/(?P<year>[0-9]{4})/(?P<mounth>[0-9]{2})/$', views.article_detail),
보기 함수: def article_detail(request,mounth,year)
주:유명 그룹 과 무명 그룹 은 혼용 하지 않 는 것 이 좋 습 니 다.6.역방향 해석
django 프로젝트 에서 흔히 볼 수 있 는 수 요 는 URL 을 얻 는 최종 형식 으로 생 성 된 내용 에 삽입 하거나(보기 와 사용자 에 게 보 여 주 는 URL 등)서버 의 네 비게 이 션(방향 변경)을 처리 하 는 데 사 용 됩 니 다.하 드 인 코딩 URL 을 원 하지 않 습 니 다.
Django 는 URL 에 name 인 자 를 제공 하고 사용자 정의,기억 하기 쉬 운 직관 적 인 문자열 을 할당 하 는 솔 루 션 을 제공 합 니 다.
url 설정:
from django.shortcuts import reverse
7.경로 배포
모든 app 에서 각각 urls.py 경로 모듈 을 만 든 다음 루트 에서 출발 하여 app 에 속 하 는 url 요청 을 모두 해당 하 는 urls.py 모듈 로 전송 합 니 다.
Django 1.1 버 전 배포
from django.conf.urls import url,include
예:총 경로:
중점:총 경로 뒤에$를 추가 할 수 없습니다.
두 개의 서로 다른 app 은 각자 의 urlconf 에서 특정한 url 에 같은 name 을 지어 서 번 거 로 움 을 가 져 옵 니 다.이 문 제 를 해결 하기 위해 아래 의 네 임 스페이스 를 끌 어 냈 다.
8.네 임 스페이스
name 에 도 메 인 이 없 기 때문에 Django 는 URL 을 역 해 할 때 프로젝트 의 전체 순서 로 검색 합 니 다.첫 번 째 name 에서 지정 한 URL 을 찾 았 을 때 바로 돌아 갑 니 다.URL 네 임 스페이스 는 다른 app 이 같은 URL 이름 을 사용 하 더 라 도 유일한 URL 을 역 검색 할 수 있 습 니 다.
예시:
urls.py
url(r'^blog/',include('blog.urls')),
url(r'^app01/',include('app01.urls')),
blog 의 urls.py
url(r'^blogtest/$', views.test,name='test'),
app 01 urls.py
url(r'^publish/$', views.publish,name='test'),
블 로그 의 보기 함수
def test(request):
url=reverse('test')
return HttpResponse('blog test)
app 01 의 보기 함수
def test(request):
url=reverse('test')
return HttpResponse('app01 test)
어쨌든 index 를 찾 는 것 은 app 01 의 index 입 니 다.해결 방법:총 경로 가 배 포 될 때 이름 공간 을 지정 하여 네 임 스페이스 를 실현 하 는 방법 은 간단 합 니 다.urlconf 파일 에 namespace='xxx'를 추가 하면 됩 니 다.
url(r'^blog/',include('blog.urls',namespace='blog')),
url(r'^app01/',include('app01.urls',namespace='app01')),
보기 함수 가 역방향 으로 해석 할 때 어떤 이름 공간 에 있 는 지 지정 합 니 다.
url = reverse('blog:test')
템 플 릿 에 도 지정
{% url 'blog:test'%}
이름 공간 을 추천 하 는 것 은 아 닙 니 다.하위 경로 의 name 에 app 접 두 사 를 추가 하 는 것 을 추천 합 니 다.
url(r'^publish/$', views.publish,name='app01_test'),
9.위 정적진짜 정적 URL 과 유사 합 니 다.그 는 위 정적 규칙 을 통 해 동적 URL 을 정적 URL 로 위장 했다.
urls.py 파일 에 일치 하 는.html 추가
url(r'^book/(?P<id>\d+.html)',views.book),
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Django 라우팅 계층 URLconf 작용 및 원리 해석URL 구성(URLconf)은 Django가 지원하는 웹 사이트의 디렉토리와 같습니다.그것의 본질은 URL과 이 URL을 호출할 보기 함수 사이의 맵표입니다. 위의 예제에서는 URL의 값을 캡처하고 위치 매개 변수로...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.