2017-08-20 9 views
0

私は既に公式のDjangoチュートリアルや他の多くの質問をstackoverflow.comで読んでいますが、私の質問には本当の答えがないか、それを得る。残念ながら、私は複数のアプリで適切なチュートリアルを見つけることができませんでした。Django:複数のアプリケーションを持つ構造体/プロジェクトの使い方

私の問題: 通常、Djangoプロジェクトは複数のアプリで構成されています。私が得られないことは、それらのアプリが一緒に働く方法です。

例: 我々はニュースのウェブサイトを構築しましょうと、このニュースのウェブサイトは、ブログの投稿、投票やコメントエリアなどを持っているので、私はそれがアプリを作成するために意味をなすだろうと思うがpollsと呼ばれ、他のアプリはblogと呼ばれ、アプリcomments

たとえば、url.com/news/5を参照すると、IDが5のブログ投稿が表示されます。または、url.com/polls/2を参照すると、IDが2の投票が表示されます。

しかし、私はそれを分離したくありません。私が得ることができないのは、(ほとんどのウェブサイトのように)単一のウェブページ上にウェブサイトのそれらの部分を持たせたいときです。つまり、私がurl.com/news/5にブラウズすれば、ニュースだけでなく投票も(投票はテーマに基づいてこのニュースページに属しているので)、ページの下部にその記事へのコメントが表示されるはずです。

どのように構造化し、一緒に「接着」しますか?

通常、url.com/news/5にアクセスすると、blogアプリ内の定義済みビュー機能が実行され、HttpResponseが提供されます。しかし、このソリューションでは、同じページで投票とコメントを行うことはできません。私の問題が何であるかはあなたにはっきりと分かっています。

複数のアプリケーションを1つのWebページに表示する "ベストプラクティス"とは何ですか?それとも全く違うのですか?

この問題を扱う実例や素敵なチュートリアルへのリンクを私に教えていただければ幸いです。

答えて

1

クラスベースの汎用ビューを使用し、余分なコンテキストを提供します。ここ

https://docs.djangoproject.com/en/1.11/topics/class-based-views/generic-display/#adding-extra-context

とサンプルコードされています:ここではドキュメントからのリンクがある​​:

from django.views.generic import DetailView 
from books.models import Publisher, Book 
class PublisherDetail(DetailView): 

    model = Publisher 

    def get_context_data(self, **kwargs): 
     # Call the base implementation first to get a context 
     context = super(PublisherDetail, self).get_context_data(**kwargs) 
     # Add in a QuerySet of all the books 
     context['book_list'] = Book.objects.all() 
     return context 

あなたはメインモデルは出版社であり、あなたが別のコンテキストを追加することができますget_context_dataで見ることができるようにすべての書籍をデータベースから取得します。これで複数のモデルを組み合わせることができます。