2011-03-20 3 views
1

django를 사용하는 모바일 장치 용 템플릿을 렌더링하는 좋은 솔루션을 경험 한 사람이 있는지 확실하지 않습니다.모바일 브라우저 용 django보기/템플리트 리디렉션

정규식을 사용하여 모바일 브라우저인지 여부를 감지하는 미들웨어 요청 프로세서를 작성했습니다. 나는 현재 요청에 부울 속성을 설정하고 있으므로 파이프 아래로 더 사용할 수 있습니다. 하지만 실제로 비즈니스 로직은 동일합니다. 다른 템플릿 세트를 사용하고 싶습니다.

미들웨어 프로세서의 settings.TEMPLATE_DIRS에 새 템플릿 디렉토리를 추가하여 모바일 사용자가 내가 다시 작성하도록 선택한보기를 가져올 수 있도록 할 수있는 방법이 있지만 그 외 모든 것은 기본 템플릿 디렉토리 . 하지만 요청간에 지속되지 않도록해야합니다.

디렉토리를 추가 한 경우 요청간에 설정이 계속 유지됩니까?

그렇다면 브라우저 에이전트를 확인하고 추가 템플릿 폴더를 추가 한 다음 각 요청이 끝날 때 제거하십시오.

답변

2

동적으로 템플릿 검색 경로를 수정하면이 문제를 해결할 수 있습니다. 나만의 템플릿 로더를 정의하여 settings.py의 TEMPLATE_LOADERS에 추가하는 것은 어렵지 않습니다. 이 까다로운 부분은 다중 스레드 환경에서 실행될 수 있다는 사실을 처리하는 것이며 템플릿 로더에 직접 요청을 전달할 방법이 없다는 것입니다.

스레드 로컬 변수의 경로에 추가 할 요청, 플래그 또는 디렉터리를 저장하고 사용자 지정 템플릿 로더의 스레드 로컬 변수를 참조하는 방법이 있습니다. 템플릿 로더를 만드는 방법은 blog post입니다. 매우 쉽고 간단하게 사용할 수 있습니다. 정확히 당신이 필요로하는 것에 대해 even better one가 있습니다.

내가 특별히 설정을 변경하려고하지 않는다고 지적하지는 않았을 것입니다. 요청 당 TEMPLATE_DIRS을 지정하면 최상의 결과를 얻을 수 있습니다.

+0

load_template_source 함수 안에있는 동안 어떻게 로컬 변수에 액세스 할 수 있습니까? 또는 로더에서 액세스 할 수있는 로컬 변수를 설정하는 방법 – MattoTodd

+0

threadlocal은 실제로 전역 변수이므로 "그냥"있지만 현재 실행중인 요청과 관련된 변수 만 가져올 것이라고 확신 할 수 있습니다. 꽤 많은 세부 사항은 여기 http://stackoverflow.com/questions/1057252/django-how-do-i-access-the-request-object-or-any-other-variable-in-a-forms-clea – easel

+0

이것은 블로그 게시물에는 모든 것이 있습니다. 나는 대답에 그것을 덧붙였다. http://opensource.washingtontimes.com/blog/2010/feb/17/loading-templates-based-request-headers-django/ – easel

관련 문제