Django 프로젝트에서 리버스를 재정의 할 수 있습니까?
-
19-09-2019 - |
문제
제 3 자 앱의 경우에도 URL이 반전 될 때마다 실행 해야하는 사용자 정의 로직이 있습니다. 내 프로젝트는 멀티 테넌트 웹 앱이며 임차인은 URL을 기반으로 식별됩니다. 테넌트 식별자가 포함되지 않은 유효한 URL은 단일 유효한 URL이 없습니다.
나는 이미 주변에 래퍼 기능이 있습니다 reverse
, 그러나 이제 설치된 모든 앱에 사용하도록 지시하는 방법이 필요합니다. 주위의 포장지 reverse
스레드 로컬을 사용하여 결과 URL에 식별자를 주입합니다. 이 기능을 데코레이터로 쓸 수 있습니다 reverse
, 그러나 나는 실제 장식을 어디에서 해야할지 모르겠습니다.
적당히 확고한 제약 조건 : 저는 이미 3 개의 3 파트 파티 앱을 사용하고 있으며 아마도 더 추가하겠습니다. 해결책 해서는 안됩니다 이 모든 타사 앱의 소스 코드를 수정해야합니다. 더 쉬운 방법이 있다면 여러 타사 소스 트리 위에 패치를 유지한다는 아이디어를 좋아하지 않습니다. 나는 문서를 풍부하게 분명히 할 수있다 reverse
장식되었습니다.
원래 질문 : 모든 호출에 적용 할 수있는 그러한 변화를 어디에서 만들 수 있는지 reverse
?
가능한 대안 질문 : 타사 앱이 생성 한 모든 URL을 포함하여 세입자 식별자를 세우는 모든 URL은 무엇입니까? BTW, 나는 URL에 임차인 -ID의 임베딩을 제외하고는 이것을 처리 할 수있는 더 나은 방법에 열려 있습니다. 그 결정은 지금 돌로 꽤 설정되어 있습니다. 감사.
감사.
해결책
django reverse가 ur_reverse로 대체되도록 유일한 방법은
django.core.urlresolvers.reverse = ur_reverse
또는 데코레이터 구문 설탕을 좋아한다면
django.core.urlresolvers.reverse = ur_reverse_decorator(django.core.urlresolvers.reverse )
ur_reverse와의 역전의 모든 사용을 기꺼이 변경하지 않는 한, 나는 조언하지 않을 것입니다 (그리고 많은 사람들이 소리칩니다)