반응형

장고, 템플릿 URl 및 아규먼트(쿼리) 이용 예제

 

글. 수알치 오상문 

 

다음 예제는 URL 링크나 아규먼트(쿼리)를 이용하여 추가 정보를 전달하는 방법을 보여줍니다. 이 예제는 두 가지 방법이 모두 섞여 있습니다. 장고 템플릿 기반이므로 일반적인 URL 링크 구조와 차이가 있습니다.

 

<a  href="{% url 'data:download' data_id=my_id  %}?item={{item_name}}&attr={{attr_name}}"> Download </i></a>

 

이 예제는 다음처럼 url 링크 설정되어 있다고 가정합니다.

 

from django.urls import path

from . import views

from django.conf.urls import url

from .views import *

 

app_name = "data"

urlpatterns = [

    path('download/<int:data_id>', views.download, name="download"),

    // ...

]

 

1) url 'data:download'

data 앱의 download 링크를 의미합니다. 실제 링크는 '.../data/download' 형식이 됩니다.

 

2) data_id=myid

app/download/data_id/ 구조로 data.id라는 하위 링크 부분에 추가되는 부분입니다.

예를 들어 my_id 값이 100이라면 '.../data/download/100/ ' url로 적용됩니다. 

즉, url 링크 구조로 데이터를 보내어 그 구조에 맞게 분리 작업을 하고 싶을 때 사용할 수 있습니다.

 

3) ?item={{item_name}}&attr={{attr_name}}

2번은 링크에 데이터를 전달했다면 3번은 아규먼트를 이용하여 데이터를 전달합니다. 

이 예제는 item, attr이라는 아규먼트에 장고 템플릿의 변수 값을 얻는 기능을 이용하여 전달합니다.

(item_name, attr_name은 페이지에 request를 요청할 때 보낸 값들입니다.)

 

4) path('download/<int:data_id>', views.download, name="download")

링크로 전달된 경우에는 url 링크 구조 분석을 통해 처리됩니다. 

<int:data_id> 부분은 url 링크 자체에 포함되는 부분을 동적으로 처리합니다.

 

5) 아규먼트를 이용한 경우에는 url 링크를 처리하는 함수에서 받을 수 있습니다.

추가 링크로 전달된 data_id는 함수 매개변수로 받을 수 있으며, 아규먼트로 받는 경우는 아래 함수를 참고합니다. 

 

@csrf_exempt

def result_download(request, data_id):  # 링크로 전달받는 data_id 

 

    if request.method == 'GET':               # GET 아규먼트로 전달받는 구조처리

        item = request.GET.get('item', '-')   # 받은 값이 없으면 '-' 값을 사용

        attr = request.GET.get('attr', '-')      # 받은 값이 없으면 '-' 값을 사용

 

    // ...

 

 

 

반응형

+ Recent posts