Django -- -- - 고급 뷰 및 URLconf 구성 URLconf 팁

19019 단어 django
URLconf의 기술 ---------
                                  <-----------------------
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 pattern) 이고, 여기의name는 그룹의 이름이며,pattern은 일치하는 패턴입니다.
이름 없는 그룹의 예:
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})

좋은 웹페이지 즐겨찾기