Django -- URLconf 구성 팁
8355 단어 테크닉djangoURLconfDjango/flask
[스트리밍 함수 가져오기(streamlining)]
방법1: 전통적인 방법
from django.conf.urls.defaults import *
from mysite.views import hello, current_datetime, hours_ahead
urlpatterns = patterns('',
(r'^hello/$', hello),
(r'^time/$', current_datetime),
(r'^time/plus/(\d{1,2})/$', hours_ahead),
)
방법2:views 함수를 가져오고 유지보수가 간단하며 import에 대한 보기 모듈
from django.conf.urls.defaults import *
**from mysite import views**
urlpatterns = patterns('',
(r'^hello/$', views.hello'),
(r'^time/$', views.current_datetime ),
(r'^time/plus/(d{1,2})/$', views.hours_ahead ),
)
방법3: 모듈 이름과 보기 함수 이름을 가져오고 인용부호로 묶는 것을 주의하십시오
from django.conf.urls.defaults import *
urlpatterns = patterns('',
(r'^hello/$', 'mysite.views.hello' ),
(r'^time/$', 'mysite.views.current_datetime' ),
(r'^time/plus/(d{1,2})/$', 'mysite.views.hours_ahead' ),
)
방법4: 공공 보기 접두사를 추출하고 접두사 뒤와 보기 문자열 앞에 점호를 두지 마세요.django가 자동으로 처리합니다
from django.conf.urls.defaults import *
urlpatterns = patterns('mysite.views' ,
(r'^hello/$', 'hello' ),
(r'^time/$', 'current_datetime' ),
(r'^time/plus/(d{1,2})/$', 'hours_ahead' ),
)
방법4(2): 만약에 우리 URLconf에 공통 접두사가 없을 때?아래와 같다
from django.conf.urls.defaults import *
urlpatterns = patterns('',
(r'^hello/$', 'mysite.views.hello'),
(r'^time/$', 'mysite.views.current_datetime'),
(r'^time/plus/(\d{1,2})/$', 'mysite.views.hours_ahead'),
(r'^tag/(\w+)/$', 'weblog.views.tag'),
)
해결: 전체 프레임워크는 urlpatterns 모듈 단계의 변수를 주목하고patterns 반환 대상은 추가할 수 있습니다.
from django.conf.urls.defaults import *
urlpatterns = patterns('mysite.views',
(r'^hello/$', 'hello'),
(r'^time/$', 'current_datetime'),
(r'^time/plus/(\d{1,2})/$', 'hours_ahead'),
)
urlpatterns += patterns('weblog.views',
(r'^tag/(\w+)/$', 'tag'),
)
특례:django 디버그 모드에서 URLconf의 행위 기술을 수정하고 debuginfo 링크는 DEBUG 설정 항목이 True일 때만 유효합니다.
from django.conf import settings
from django.conf.urls.defaults import *
from mysite import views
urlpatterns = patterns('',
.....
)
if settings.DEBUG:
urlpatterns += patterns('',
(r'^debuginfo/$', views.debug),
)
[url의 명명법 일치 모드]
방법1:python 함수에서 위치 매개 변수와 키워드 매개 변수의 대응 관계, 예를 들어python 함수의 문법(?P 일치 모드)을 사용합니다.
##
from django.conf.urls.defaults import *
from mysite import views
urlpatterns = patterns('',
(r'^articles/(\d{4})/$', views.year_archive),
(r'^articles/(\d{4})/(\d{2})/$', views.month_archive),
)
##
from django.conf.urls.defaults import *
from mysite import views
urlpatterns = patterns('',
(r'^articles/(?P\d{4})/$', views.year_archive),
(r'^articles/(?P\d{4})/(?P\d{2})/$', views.month_archive),
)
그것들의 차이를 구분하기 위해 요청/archive/2016/12를 예로 들면 함수는 어떻게 호출되었습니까?전자:montharchive(request,'2016','12') 후자:montharchive(request,year='2016',month='12') 단점: 이렇게 하면 가독성이 강하고 정확하지만 불필요성도 떨어진다.또한 URLconf 모드에서는 명명된 그룹과 명명되지 않은 그룹 형식이 동시에 존재할 수 없습니다. 우선순위: 명명된 그룹 > 비명명된 그룹 > 키워드는 추가 파라미터를 전달합니다.
[추가 매개 변수 정보 전달]
우리가 쓴 보기 함수에서 우리는 많은 보기 함수가 유사하지만, 또 다른 것을 발견할 수 있다. 우리는 어떻게 해야 그것을 더욱 간결하게 쓸 수 있는지, 원시 템플릿은 다음과 같다.
# urls.py
from django.conf.urls.defaults import *
from mysite import views
urlpatterns = patterns('',
(r'^foo/$', views.foo_view),
(r'^bar/$', views.bar_view),
)
# views.py
from django.shortcuts import render_to_response
from mysite.models import MyModel
def foo_view(request):
m_list = MyModel.objects.filter(is_new=True)
return render_to_response('template1.html', {'m_list': m_list})
def bar_view(request):
m_list = MyModel.objects.filter(is_new=True)
return render_to_response('template2.html', {'m_list': m_list})
방법1:if판단을 추가하면 단점은 url을 코드에 결합시키는 것이다. url을 바꾸면 보기 함수를 바꾸어야 한다.
# views.py
from django.shortcuts import render_to_response
from mysite.models import MyModel
def foobar_view(request, url):
m_list = MyModel.objects.filter(is_new=True)
if url == 'foo':
template_name = 'template1.html'
elif url == 'bar':
template_name = 'template2.html'
return render_to_response(template_name, {'m_list': m_list})
방법2: URLconf에 세 번째 위치 매개변수: 키워드 매개변수
# urls.py
from django.conf.urls.defaults import *
from mysite import viewsurlpatterns = patterns('',
(r'^foo/$', views.foobar_view, {'template_name': 'template1.html'}),
(r'^bar/$', views.foobar_view, {'template_name': 'template2.html'}),
)
# views.py
from django.shortcuts import render_to_response
from mysite.models import MyModel
def foobar_view(request, template_name):
m_list = MyModel.objects.filter(is_new=True)
return render_to_response(template_name, {'m_list': m_list})
예를 들어 우리는 다음과 같은 규칙의 URL에 방문해야 한다
/mydata/jan/01//mydata/jan/02//mydata/jan/03/# .../mydata/dec/30/mydata/dec/31/URLconf와 보기 함수를 다음과 같이 설정할 수 있습니다.
urlpatterns = patterns('',
(r'^mydata/(?P\w{3})/(?P\d\d)/$', views.my_view),
)def my_view(request, month, day):
# ....그러나 만약 우리가/mydata/birthday/에 접근하는 URL을 늘리고 싶다면, 정상적으로 우리는 그에게 보기 함수를 주어야 하지만, 우리는 위에서 추가 매개 변수를 전달하여urlpatterns = patterns () 를 해결할 수 있다.
(r'^mydata/birthday/$', views.my_view, {'month': 'jan', 'day': '06'}),
(r'^mydata/(?P\w{3})/(?P\d\d)/$', views.my_view),
)
[include 기타 URLconf]
때때로 우리는 우리의 코드를 여러 개의django 사이트에 사용하기를 원하기 때문에, 우리는 우리의 URLconf를 포함하는 방식으로 처리하는 것을 고려해야 한다.
from django.conf.urls.defaults import *
urlpatterns = patterns('',
(r'^weblog/', include('mysite.blog.urls')),
(r'^photos/', include('mysite.photos.urls')),
(r'^about/$', 'mysite.views.about'),
)
주: 다른 urls를 포함하는 URL에는 $문자가 없지만,/가 포함되어 있습니다. 그는django가include를 만났을 때, 일치하는 URL을 차단하고, 나머지 문자열을 포함하는 URLconf에 보내서 더 처리한다는 뜻입니다.예를 들어 Google 접근/weblog/2007/weblog는 이 URL conf와 일치하고,/차단된 2007은 포함된 URL conf의 urls에 전달됩니다.1. 포획된 매개 변수와include
# root urls.py
from django.conf.urls.defaults import *
urlpatterns = patterns('',
(r'^(?P\w+)/blog/', include('foo.urls.blog')),
)
# foo/urls/blog.py
from django.conf.urls.defaults import *
urlpatterns = patterns('',
(r'^$', 'foo.views.blog_index'),
(r'^archive/$', 'foo.views.blog_archive'),
)
이 예에서 포획된username 변수는 포함된 URLconf에 전달되며, 그 URLconf의 모든 보기 함수에 전달됩니다.2. 추가 URLconf와include는 위에서 언급한 바와 같이 URLconf에는 세 번째 위치의 매개 변수가 있는데 사전으로 다음 두 개의 설정이 같은 효과를 가진다는 것을 나타낸다.
# urls.py
from django.conf.urls.defaults import *
urlpatterns = patterns('',
(r'^blog/', include('inner'), {'blogid': 3}),
)
# inner.py
from django.conf.urls.defaults import *
urlpatterns = patterns('',
(r'^archive/$', 'mysite.views.archive'),
(r'^about/$', 'mysite.views.about'),
(r'^rss/$', 'mysite.views.rss'),
)
# urls.py
from django.conf.urls.defaults import *
urlpatterns = patterns('',
(r'^blog/', include('inner')),
)
# inner.py
from django.conf.urls.defaults import *
urlpatterns = patterns('',
(r'^archive/$', 'mysite.views.archive', {'blogid': 3}),
(r'^about/$', 'mysite.views.about', {'blogid': 3}),
(r'^rss/$', 'mysite.views.rss', {'blogid': 3}),
)
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Xcode 개발 디버그 기술 5개Enable NSZombie Objects는 Xcode 개발 환경 전체에서 가장 유용한 디버그 기술일 수 있습니다.이 기교는 중복 방출 문제를 추적하기 매우 쉽다.이 기교는 반복적으로 방출되는 클래스와 이 클래스의 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.