Django는 클릭 상세 정보를 새로운 인터페이스, 루트 이름과 배달로 전환3

8792 단어 Django
1. URL에서 get 방식
url에서 get 참조를 이용하여 새 페이지를 엽니다
views.py에서 함수를 정의하고 urls에 루트 정보를 작성합니다.
def index(request):
    return render(request,'index.html',{'user':USER_DICT})
def detail(request):
    #        , url get     
    nid=request.GET.get('nid')
    detail_info=USER_DICT[nid]
    return render(request,'detail.html',{'detail_info':detail_info})
urlpatterns = [
path('index/', views.index),
path('detail/',views.detail)
]

index.html 중:
   
    {# ,url #} {% for foo,v in user.items %}
  • {{ v.name }}
  • {% endfor %}

detail.html 중:

:{{ detail_info.name }}

:{{ detail_info.super }}


2. 정규 매칭 활용
1. 기본 방법:
하나의 클래스 URL은 하나의 함수에 대응한다
views에서.py와urls.py에서 수정됨:
def index(request):
    return render(request,'index.html',{'user':USER_DICT})
def detail(request,nid):
    #  url      
    detail_info=USER_DICT[nid]
    return render(request,'detail.html',{'detail_info':detail_info})

이것은 새 APP 파일에서 urls를 새로 만듭니다.py에서 수정
from django.conf.urls import url
from . import views
urlpatterns = [
    url('login/', views.login),
    url('home/',views.Home.as_view()),
    url('index/', views.index),
    # url('detail/',views.detail),
    url(r'detail-(\d+)', views.detail, name="index"),          #  url      
]

          index.html에서 수정됨:
   
    {# url #} {% for foo,v in user.items %}
  • {{ v.name }}
  • {% endfor %}

detail.html 수정 안 함
2. 맞춤법(추천 맞춤법)
views.py와urls.py에서 detail의 인삼과 경로의 정규 표현식을 각각 수정합니다.
def detail(request,*args,**kwargs):
    #  url      ,      
    nid=kwargs['nid']
    detail_info=USER_DICT[nid]
    return render(request,'detail.html',{'detail_info':detail_info})
urlpatterns = [
    url('login/', views.login),
    url('home/',views.Home.as_view()),
    url('index/', views.index),
    # url('detail/',views.detail),
    # url(r'detail-(\d+)-(\d+).html', views.detail, name="index"),          #  url      
    url(r'detail-(?P\d+)-(?P\d+).html', views.detail),          #  url      
]

index.html은 수정하지 않아도 됩니다. 여기서 결과를 관찰하기 편리하도록 약간 조정합니다.
    
    {# ,url #} {% for foo,v in user.items %}
  • {{ v.name }}
  • {% endfor %}

3. 경로의 대응 명칭
루트는 URL의 경로 정보에 대응하고 Django는 경로 정보를 쉽게 수정할 수 있는 방법을 제공합니다
1. 초급 사용
urls에 있습니다.py에 정의되어 name 속성을 추가합니다.
urlpatterns = [
    url('login/', views.login),
    url('home/',views.Home.as_view()),
    url('myindex/', views.index,name='index'),
]

템플릿 언어에서 호출하고 action의 제출 경로를 수정합니다. 빈칸을 주의하십시오.


2. 현재 URL에서 지정한 URL 경로로 제출
views.py와urls.py에서 해당 함수를 순서대로 수정합니다.
def index(request,nid):
    #          
    return render(request,'index.html',{'user':USER_DICT})
urlpatterns = [
    url('myindex/(\d+)', views.index,name='index')
]

템플릿 언어에서 action 수정(숫자 1만 증가):


3. 현재 URL에서 현재 URL 경로로 제출
views.py와urls.py의 정보는 위와 같습니다. 템플릿 언어의 action을 수정하기만 하면 됩니다.


4. 현재 URL을 지정한 URL 경로에 대한 다른 쓰기 방법을 제출합니다.
4.1 views에서.py에서 Request를 직접 수정합니다.path_info 값
def index(request,nid):
    print(request.path_info)
    # 1.    ,     path_info  
    request.path_info='/myindex/40'
    return render(request, 'index.html', {'user': USER_DICT})

4.2views에서.py에서 함수를 호출하고django를 실행합니다.urls의reverse 함수
a. 목록형 매개변수의 경우:
def index(request,nid):
    print(request.path_info)
    # 1.    ,     path_info  
    # request.path_info='/myindex/40'
    #2.  2
    from django.urls import reverse
    v=reverse('index',args=(40,))
    request.path_info=v
    return render(request,'index.html',{'user':USER_DICT})

템플릿 언어 index.html에서 수정을 하지 않습니다. 여기는 전시만 합니다.


b. 사전 유형의 매개변수에 대해 다음을 수행합니다.
우선 urls에 있어야 합니다.py의 정의:
urlpatterns = [
    url('login/', views.login),
    url('home/',views.Home.as_view()),
    url('myindex/(?P\d+)/(?P\d+)', views.index,name='index'),
]

그리고views에서.py에서 수정됨:
def index(request,*args,**kwargs):
    print(request.path_info)
    # 1.    ,     path_info  
    # request.path_info='/myindex/40'
    #2.  2
    from django.urls import reverse
    v=reverse('index',kwargs={"nid":1,"pid":99})
    request.path_info=v
    return render(request,'index.html',{'user':USER_DICT})

index.html에서 수정하지 않고 여기는 전시만 합니다.


5. 템플릿 언어에서 URL 제출 경로 수정
action="{% url 'index' %}"
action="{% url 'index' 1  92 %}"
action="{% url 'index' nid=1  pid=92 %}"

4. 라우팅 배포
1. 다중 레벨 라우팅
프로젝트 아래의urls.py에서 수정됨:
from django.contrib import admin
from django.urls import path,include

urlpatterns = [
    path('admin/', admin.site.urls),
    path('',include('app01.urls')),
]

app 디렉터리에 urls를 만듭니다.py에서 수정됨:
from django.conf.urls import url
from . import views
urlpatterns = [
    url('login/', views.login),
    url('home/',views.Home.as_view()),
    url('myindex/(?P\d+)/(?P\d+)', views.index,name='index'),
]

2. 네임스페이스
프로젝트의 urls에 있습니다.py에서 수정됨:
from django.contrib import admin
from django.urls import path,include

urlpatterns = [
    path('admin/', admin.site.urls),
    path(r'shop/', include('shop.urls', namespace='shop-polls')),
    path(r'consumer/', include('consumer.urls', namespace='consumer-polls')),
] 

상응하는 app 파일의 urls를 각각 수정합니다.py:
from django.conf.urls import url
from . import views
app_name = 'shop'
urlpatterns = [
    url(r'^(?P\d+)/$', views.detail, name='detail')
]


대응하는 app 파일의views를 수정합니다.py 파일
def detail(request, nid):
    print(request.resolver_match)
    return HttpResponse(nid)

네임스페이스가 있는 URL을 정의한 후name을 사용하여 URL을 생성할 때 다음과 같이 해당하는 방식으로 작성해야 합니다.
v = reverse('shop:detail', kwargs={'nid':11})


좋은 웹페이지 즐겨찾기