2011-12-30 6 views
3

나는 Idios, a profile app을 실행 중이며 내 앱에서 프로필을 만들어 (프로필 자체를 수정하지 않고 idios pip-installable로 유지).장고 템플릿 컨텍스트 다중보기

문제는 idios 앱에서 컨텍스트 변수를 전달하고 해당보기를 템플릿에 표시하는 객체 지향 접근 방식을 사용하여 프로필보기를 작성한다는 것입니다. 프로필보기에 별도의 친구 앱이 관리하는 사용자의 친구 목록도 포함되기를 바랍니다. Idios에 친구를 가져오고 새로운 friend_list 변수로 컨텍스트를 업데이트하고 친구 목록을 표시하기 위해 다른 템플릿 블록을 추가하는 것만으로 개념 증명을 얻었습니다.

idios 앱을 변경하지 않고 친구 목록과 프로필을 결합하는 가장 좋은 방법은 무엇입니까? 이 질문은 기본적으로 의 장황한 MVT 시스템을 재사용 가능한 앱을 지원하는 DRY 방식으로 이해하는 데 도움을 드리고자합니다.

답변

2

감사하게도 언급 된 앱은 클래스 기반보기를 사용하며 클래스 기반보기를 사용하면 이점을 얻을 수 있습니다.

yourapp/views.py

from idios.views import ProfileDetailView 

class MyProfileDetailView(ProfileDetailView): 
    def get_context_data(self, **kwargs): 
     context = super(MyProfileDetailView, self).get_context_data(**kwargs) 

     # get the list of friends and store it in a new key in `context` 

     return context 

그런 다음, 바로 URLPATTERN idios를 재정의 당신의 urls.py에서 기본적으로 사용 (요구 : 컨텍스트를 수정하려면, 당신은 단지 자신의 프로필보기의 서브 클래스를 생성 idios urlpatterns가 포함되기 전에 이동하려면)

마지막으로 프로젝트 또는 응용 프로그램의 templates 디렉토리에 idios/whatever_template.html 파일을 만들어서 idios 템플릿을 재정의하려면 다음을 수행하십시오. 기본 템플릿을 복사하고 원하는대로 수정하십시오. Django가 사용할 수있는 모든 재정의 덕분에 원래 소스를 실제로 만질 필요는 없습니다.

+0

위대한 분들께서 많은 도움을 주셨습니다.이 설명은 좀 더 자세하게 설명되었으므로 선택 했으니 까 두 가지면 충분합니다. 객체 지향 접근법에 이점이 있다는 것을 알았고 클래스 간 상속 (class inheritance)을 보지 못했습니다. – wrought

+0

아, 그리고 방금이 방법으로 구현하여 완벽하게 작동했습니다. – wrought

1

프로젝트의 앱에서 idios의 ProfileDetailView 클래스의 하위 클래스를 만들어 해당 사용자의 친구에 대한 추가 컨텍스트를 추가하여이 작업을 수행 할 수 있어야합니다. 다음과 같은 내용이 있습니다 :

import idios.views 

class ProfileDetailView(idios.views.ProfileDetailView): 

    def get_context_data(self, **kwargs): 
     context = super(ProfileDetailView, self).get_context_data(**kwargs) 
     context['friends'] = get_friends(self.page_user) # Or however it works 
     return context 

그런 다음이 하위 클래스를 프로젝트의보기로 사용할 수 있습니다.

0

다른보기에도 사용자의 친구를 포함하려는 경우 DRY 방법은 custom template tag or filter을 만드는 것입니다. 그런 다음 템플릿을 재정의하고 템플릿 태그/필터를 포함시켜야합니다.

이 특정보기에만 사용자의 친구 만 표시하려면 다른 대답에 설명 된대로 get_context_data을 무시하십시오.

+0

좋은 점은 질문이 제기 된 방식에 대해 위의 해결 방법으로 충분하다고 생각합니다. 귀하의 수퍼 DRY 방법은 이해가됩니다. – wrought

+0

idios 프로필 앱에 다른 변경 사항을 만들어야하기 때문에 위의 방법이 유용합니다. 따라서 모든 것을 내 앱에서 수행하고 하위 클래스 뷰를 만드는 등의 작업을 수행 할 것입니다. 다음 단계 (문제로 추가 할 것입니다)는 idios 프로필뿐만 아니라 여러 앱에서 친구보기를 더욱 추상화하여 사용하는 것입니다. – wrought