2014-07-08 1 views
5

나는 그물을 뒤적 거리며 아무 대답도 찾지 못했습니다. 장고를 처음 사용했습니다. 공식 튜토리얼을 끝내고 더 많은 내용을 읽었지만 불행히도 이들 모두는 하나의 애플리케이션 만 만드는 데 중점을 둡니다. 한 페이지를 하나의 앱으로 사용하는 것은 흔한 일이 아니므로 장고 전문가에게 웹 페이지에 여러 개의 앱을 설치하는 방법을 설명해달라고 요청하고 싶습니다. mysite.com에 가면 설문 조사를 표시하는 설문 조사 앱, 일부 사진을 표시하는 갤러리 앱, 최신 뉴스 등을 표시하는 뉴스 앱, 한 URL을 통해 모두 액세스 한 것을 볼 수 있습니다. 나는 템플릿에서 표시를하지만 분명히 데이터에 액세스해야한다는 것을 알고 있습니다. 여러보기를 반환하기 위해보기를 작성합니까? 모든 조언, 링크 및 예제가 많이 감사합니다.장고 - 하나의 웹 페이지에 여러 개의 앱이 있습니까?

답변

6

을 도움이되기를 바랍니다.

템플릿에서 views.py

def home(request, template='path/to/template'): 
    context = { 
     'polls': Poll.objects.all(), 
     'galleries': Gallery.objects.all(), 
    } 
    return (request, template, context) 

:

{% for poll in polls %} 
{{ poll }} 
{% endfor %} 
{% for gallery in galleries %} 
{{ gallery }} 
{% endfor %} 

urls.py

url('home/$', app.views.home, name='home') 

당신은 사이드 바에서 같은 정보를 표시 할 경우 그러나 그것은 어디 것이다 항상 표시되고 템플릿 태그를 사용하고 싶습니다.

1

각 페이지 또는보기는 단일 앱에 포함되어야하지만 앱 내에서 다른 앱을로드 할 수 있습니다. 그러나이 앱은 다른 앱이 존재하는지에 따라 달라집니다.

그래서 당신은 그 thisapp.views에 당신은 단순히이

from otherapp.models import OtherAppModel 
같은 파일의 상단에 가져 오기를 추가합니다 "thisapp"라는이 응용 프로그램에서 "otherapp"라는 응용 프로그램에서 뭔가를 표시하려는 경우

가져 오기를 완료하면 해당 모델 필드 및 메소드에 액세스 할 수 있습니다. 또한 설정 파일의 INSTALLED_APPS 목록에 모든 앱을 추가했는지 확인하십시오.

+0

나는 당신이 원하는 것을 알고 있지만 이것은 내가 원하는 것을 얻기위한 올바른 해결책이 아닙니다. 나는 somwhere이 해결책을 읽었다; 항상 같은보기를 만든 다음 다른보기를 렌더링하는보기를 만듭니다. 나는 페이지에서 원하는 모든 응용 프로그램을 렌더링하는보기 홈을 만들 수 있었고 여전히 그 응용 프로그램을 separetly에 액세스 할 수있었습니다. 어쨌든 당신의 대답에 감사드립니다. – yoK0

0

내 경험에 의하면 일반적으로 템플릿 태그 https://docs.djangoproject.com/en/dev/ref/templates/builtins/을 사용합니다. 예를 들어 페이지에 설문 조사를 추가하려면 설문 조사 응용 프로그램을 작성한 다음 템플리트 태그를 사용하여 페이지에 설문을 추가하십시오. 설문 조사가 귀하의 견해에 포함되지 않습니다.

+0

그래, 설문 조사보다 더 많은 것을보고 싶다면 어떻게 됐을까요? 설문 조사 및 다른 응용 프로그램을 반환하는보기를 만들 수 있지만 다른 응용 프로그램에서 다른 응용 프로그램을 혼자 사용할 수는 없습니다. – yoK0

+0

당신은 이것을 생각하지 않을 수도 있습니다. 보기에는 단일 모델에 대한 정보 만 들어 있어야하며 다른 모델을 포함해서는 안됩니다. 템플릿 태그는 뷰에서 추가 정보를 삽입하는 도우미입니다. – mrfunyon

+0

동의합니다. 그러나 뷰가 다른 앱을 반환하지 않으면 템플릿 태그와 함께 사용할 수 없습니다. 그리고 우리는 주된 질문으로 돌아 왔습니다. 나는 그다지 놀라운 일을하지 않는다. 내가 구하는 마법 물건인가? 그냥 장고와 함께 정기적으로 웹 사이트를 구축 알고 싶습니다. – yoK0

7

django 앱은 실제로 페이지에 매핑되지 않고 함수로 매핑됩니다. 앱은 '설문 조사'앱이나 '뉴스'앱과 같은 것입니다. 각 응용 프로그램에는 몇 가지 지원 모델이있는 하나의 기본 모델이 있어야합니다. 뉴스 앱처럼 저자 및 미디어와 같은 지원 모델이 포함 된 기사 모델을 가질 수 있습니다.

여러 개를 표시하려면 통합 응용 프로그램이 필요합니다. 이렇게하는 한 가지 방법은 설문 조사 및 뉴스 앱 옆에 '프로젝트'앱을 설치하는 것입니다. 프로젝트 응용 프로그램은 특정 웹 사이트 용입니다.이 응용 프로그램과 관련된 논리입니다. 그것은 기본 urls.py, 기본 templat (s), 그런 것들을 가질 것입니다. 한 페이지에 여러 앱의 정보가 필요한 경우 여러 앱에서 정보를 반환하는보기가 있어야합니다. 예를 들어, 뉴스 기사에 대한 정보를 반환하는보기와 설문 조사에 대한 정보를 반환하는보기가 있다고 가정 해보십시오. 당신은 두 가지 뷰 함수를 호출하고 리턴 된 데이터를 두 가지 모두를위한 스폿을 가진 다른 템플릿에 집어 넣는 뷰를 프로젝트 앱에 가질 수 있습니다.

이 특정 예에서는 설문 조사 응용 프로그램을 설정하여 반환 정보가 포함 된 다음 뉴스 기사에 정보를 포함 할 수 있습니다. 이 경우에는 앱을 개발의 일부로 함께 연결하지 않아도되며, 콘텐츠 작성이 끝나면 필요에 따라 앱을 연결할 수 있습니다.

+0

감사합니다. 가장 정확한 대답 인 것 같습니다. 그래서 저는 다른 시각으로 돌아가는 관점에서 꽤 많이 다루었습니다. 이게 진짜 개발자가 내 바보 같은 질문에 대한 답이나 그 대답을하는 방식입니까? – yoK0

+0

내가 본 프로젝트는 그런 식으로 설정됩니다. 메 자닌 프로젝트를 살펴보고 지침에 따라 프로젝트를 설정 한 다음 저장소를 살펴보십시오. 그것은 통합 된 경험을 만드는 데 필요한 다양한 애플 리케이션을 활용 프로젝트 수준의 애플 리케이션으로 당신을 설정합니다. –

1

레이아웃을 여러 div로 만들 수 있습니다. 각 앱마다 모두 배포하려는 의도로 각 div 내에 미리보기와 함께 Google 검색처럼 원하는 모든 응용 프로그램 URL의 내용을 쉽게 그릴 수 있습니다. 특정 경우에 CSS 분리 기술을 사용하지 않으려면 모든 앱에 공통 CSS를 사용하는 것이 좋습니다. 또 다른 해결책은 iframe을 사용하는 것입니다. 이 유용 할 수 있습니다 :

https://github.com/diefenbach/django-portlets

Ajax/jQuery - Load webpage content into a div on page load?

https://pythonhosted.org/django-portlets/

그것이 당신은 페이지에서 응용 프로그램 데이터를 표시하려면이 같은 뭔가를 할 수

+0

흥미 롭습니다. 감사 – yoK0

관련 문제