Django -- -- - 고급 뷰 및 URLconf 구성 URLconf 팁
19019 단어 django
<-----------------------
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), <=============================
)
views <---------------------------------------------------------------
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 ),<==========================
)
, <-----------------------------
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'** ),<=============
)
<---------------------------------------------------------------
urlpatterns = patterns(**'mysite.views'** , <================================
(r'^hello/$', **'hello'** ),
(r'^time/$', **'current_datetime'** ),
(r'^time/plus/(d{1,2})/$', **'hours_ahead'** ),
)
<---------------------------------------------------------------
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'),
)
, urlpatterns django urlconf
from django.conf import settings
from django.conf.urls.defaults import *
from mysite import views
urlpatterns = patterns('',
(r'^$', views.homepage),
(r'^(\d{4})/([a-z]{3})/$', views.archive_month),
)
if settings.DEBUG: <=====================================
urlpatterns += patterns('',
(r'^debuginfo/$', views.debug),
)
이름 지정 그룹을 사용하려면 다음과 같이 하십시오.
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),
)
이름 지정 그룹의 예: 같은 URLconf 다시 쓰기:
from django.conf.urls.defaults import *
from mysite import views
urlpatterns = patterns('',
(r'^articles/(?P<year>\d{4})/$', views.year_archive),
(r'^articles/(?P<year>\d{4})/(?P<month>\d{2})/$', views.month_archive),
)
위의 두 단락 코드의 기능은 완전히 같고 단지 하나의 차이만 있다. 값을 얻기 전에는 위치 매개 변수로 보기 함수에 전달되고 다음은 키워드 매개 변수로 보기 함수에 전달된다.
예를 들어,/articles/2012/08과 같은 명명 그룹 요청이 없는 함수는 다음과 같습니다.
month_archive(request, '2006', '03')
이름 그룹이 있으면 다음과 같이 호출됩니다.
month_archive(request, year='2006', month='03')
이름 그룹을 사용하면 URLconf를 더욱 뚜렷하게 보이고 매개 변수의 순서를 헷갈리는 잠재적인 버그를 줄일 수 있으며, 함수 정의에서 매개 변수를 다시 정렬할 수 있습니다. 즉 URL에서 매개 변수의 순서를 수정하면 보기에 영향을 주지 않습니다.물론 대가는 간결성을 잃고 가독성이 강하다는 것이다.
URLconf :
,Django 。
,Django 。
,Django 。 。
만약 보기 함수가 매우 유사하게 쓰여 있다면, 단지 약간의 차이가 있을 뿐이다.예를 들어, 템플릿이 다른 경우를 제외하고 두 개의 뷰가 일치합니다.
# 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})
코드가 중복되어 URL에서 요청을 괄호로 포착한 다음 보기에서 어떤 템플릿을 사용할지 확인합니다.
# urls.py
from django.conf.urls.defaults import *
from mysite import views
urlpatterns = patterns('',
(r'^(foo)/$', views.foobar_view), <==========================
(r'^(bar)/$', views.foobar_view),
)
# 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})
선택할 수 있는 URL 설정 매개 변수의 우아한 해결 방법: URLconf의 모든 모드는 세 번째 데이터를 포함할 수 있습니다: 키워드 매개 변수의 사전: 보기 함수로 사전을 만드는templatename을 다른 매개 변수로 합니다.
# urls.py
from django.conf.urls.defaults import *
from mysite import views
urlpatterns = 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})
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Django의 질문 및 답변 웹사이트환영 친구, 이것은 우리의 새로운 블로그입니다. 이 블로그에서는 , 과 같은 Question-n-Answer 웹사이트를 만들고 있습니다. 이 웹사이트는 회원가입 및 로그인이 가능합니다. 로그인 후 사용자는 사용자의 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.