2012-01-10 4 views
2

Django 웹 사이트에 url 또는 query string을 통해 설정하고자하는 특정 매개 변수가 있습니다. 예 : mysite.com/?param=value. 일단이 값이 설정되면 모든 값을이 뷰로 전달해야합니다. request.GET.get('param', 'default value')으로 확인할 수 있습니다. 장고에서 가장 쉬운 방법은 무엇입니까?url 매개 변수를 지속적으로 설정하기

더 명확하게하기 위해, 여기 예가 있습니다 - 내 사이트의 머리글에 년 목록이있는 드롭 다운 메뉴가 있습니다. 올해 웹 사이트의 다른 모든 부분 (예 : mysite.com/?year=1999)으로 이동하려면 올해, mysite.com/onemorething/?year=1999 등의 선택 항목 중 하나를 클릭하면됩니다. 미리 감사드립니다.

답변

4

request.GET 대신 request.session에 저장하는 것이 하나의 선택입니다. 아직 설정하고 당신이 원하는 것과 마찬가지로 액세스 할 것 :

request.session["param"] = "my value" 

request.session.get('param', 'default value') 

세션을 사용하는 모든 세부 사항에 대한 here를 참조하십시오.

투명하게 사용자가 변경할 수 있도록 URL에 특별히 지정하려는 경우는 예외입니다.

ETA : 귀하의 질문에 어떤 대답 : 당신이 정말로 년 = 1999 URL이 의 모든보기를 세션 변수를 설정하려면

  1. , 당신은 사용자 정의 middleware 클래스를 만들 수 있습니다. 미들웨어는 뷰에 도달하기 전에 HttpRequest를 변경하거나 뷰에서 돌아 오는 HttpResponse를 변경할 수있는 필터 역할을합니다. 이 경우 필요에 따라 request.GET을 확인하고 request.session을 설정 한 다음보기를 실행하십시오. 문서를보고 미들웨어에 대한 세부 정보를 읽으십시오.

  2. URL에 넣으면 좋은 생각이 아닙니다. 주변에는 여러 가지 방법이 있지만 문제가 많습니다.

  3. RequestContext ~ pass a request to a template을 수정할 수 있습니다. 그러나 왜 지구상에서보기 기능 대신에 그것을 할 수 있습니까?

+1

+1 * 절대적으로 * 사용 요청서. 모든 URL에 GET 매개 변수를 추가하는 것은 끔찍하고 검색 엔진 결과를 망칠 가능성이 있습니다. –

+0

고마워요. 내가 몇 가지 점을 분명히하자. 1. 세션 변수는 어디에 설정해야합니까? 이상적으로,'? year = 1999' 부분이있는 링크를 클릭하면 설정되어야하지만, 그것은 단지 하나가 아닌 내 견해 중 하나 일 수 있습니다. 2. URL에이 부분이있는 것이 좋지만 어쨌든 헤더에 현재 연도를 표시하는 메뉴가 있으므로 주위를 둘러 볼 수 있습니다. 3. 템플릿에서 세션 변수를 설정할 수 있습니까? – exfizik

+0

'1.' 내 질문은 이제 어느 것이 더 나은가? - 컨텍스트 프로세서 또는 미들웨어? 전 템플릿으로 볼 수있는 변수를 설정할 수 있기 때문에 전자를 생각하고 있습니다. '2.' 나는 그것이 일반적인 관행이었다고 느꼈다. '3.' 내가 기본 템플릿에서 설정할 수 있기 때문에 다른 템플릿이 확장 된 대신 모든 뷰를 수정하는 대신 확장 할 수 있습니다. 현재, 내가 그것을 볼 수있는 방법은? 년 = 1999 '2.'Check'request.GET'은'year' 컨텍스트 프로세서의 키 또는 미들웨어 '3의 좋아하는이 '1.'Create 링크 ''set'request.session [ 'year']' '4.'이 값을 템플릿에 사용하도록 전달하십시오. – exfizik

관련 문제