난이 꽤 오래된 질문 알고 ...하지만 나는 해결책을 찾을 생각 : 윌 하디 당신이 그것을 전혀 정의 두 인스턴스에 대한 app_name
에게 동일하게 유지 (또는하지해야합니다 제안으로
을 , 포함 된 URL이있는 앱으로 기본 설정됩니다). 하지만 각 응용 프로그램 인스턴스에 대한 별도의 네임 스페이스를 정의
urlpatterns = patterns('',
(r'^carphotos/', include('webui.photos.urls', app_name="webui_photos", namespace='car-photos')),
(r'^userphotos/', include('webui.photos.urls', app_name="webui_photos", namespace='profile-photos')),
)
는 이제 뷰에서 현재 활성화 된 응용 프로그램 인스턴스 (네임 스페이스)를 설정하는 약간 까다로운 부분 온다. 어떤 앱 인스턴스가 활성 상태인지 찾아서 RequestContext
에 전달해야한다는 의미입니다.
는 현재 활성화 된 응용 프로그램을 찾으려면
는
django.core.urlresolvers.resolve
을 사용할 수 있습니다
r = resolve(request.path)
r.app_name # the app name
r.namespace # the the currently active instance
그래서 그에 따라 귀하의 의견을 (이 클래스를 기반으로보기를 사용하여 가정)를 업데이트해야합니다 :
from django.core.urlresolvers import resolve
from django.views.generic import TemplateView
class AlbumCreateView(TemplateView):
template_name = 'path/to/my/template.html'
def render_to_response(self, context, **response_kwargs):
response_kwargs['current_app'] = resolve(self.request.path).namespace
return super(AlbumPageView, self).render_to_response(context, **response_kwargs)
이제 url 태그는 자동으로 올바른 네임 스페이스로 되돌려지고 필요한 경우 특정 앱 네임 스페이스로 되돌릴 수 있습니다.
{% url webui_photos:album-create %} {# returns the url for whatever app is current #}
{% url car-photos:album-create %}
{% url profile-photos:album-create %}
이보기의 URL을 바꾸려면, 현재 응용 프로그램 인스턴스는 수동으로 전달해야합니다 :
reverse('webui_photos:album-create', current_app=resolve(self.request.path).namespace))
난 당신이 제안 문서를 참조하십시오. 나는 그것이 옳은 대답이라고 생각하지 않는다. 문서에 따르면 Sites 프레임 워크는 사이트간에 정보를 공유하고자 할 때 유용하지만, 제 경우에는 하나의 사이트 만 있습니다. 기술적으로 다른 하위 도메인에 내 사진 앱을 배포하는 것이 가능하지만 재사용 가능한 앱의 모든 인스턴스에 대해 별도의 도메인을 만드는 것이 좋지 않다고 생각합니다. – Nike