1

私がこれまでに見つけた基本的なDjangoチュートリアルとドキュメントでは、アプリはプロジェクトのいくつかのスタンドアロン部分として扱われます。ただし、複雑なプロジェクトでそれらを一緒に使用するソリューションはまだ見つかりません。

いくつかのURLでサインアップできdomain/signup、それはによって処理されusers.views.signupます。

  • GETリクエストの場合signupはレンダリングしsignup.htmlます。
  • POSTリクエストの場合、投稿されたデータを評価した後、signup.html メッセージを表示するか、新しいユーザーを登録し、ログインしてどこかにリダイレクトします。

domain/new_postで処理される(またはdomain/user/new_post)で新しい投稿を作成できますposts.views.new_postsignupハンドラーと同様に機能します。

  • GETリクエストの場合、レンダリングされnew_post.htmlます。
  • POSTリクエストの場合、投稿データを評価し てからnew_post.html、メッセージでレンダリングするか、新しい投稿を登録してどこかにリダイレクトします。


一般的なウェブサイトはいくつかのアプリで構成されており、いくつかのURLでリクエストに対して表示されるウェブページは、いくつかのアプリの機能を提供します。
たとえば、人気のあるソーシャルサイトにログインした後、ウォールに新しいエントリを作成し、ユーザーを検索できます(通常はより広い検索ですが、簡単にするために、ユーザーのみを扱います)。広告や友達もサイドバーにリストされています。

これらのパーツは、さまざまなアプリのさまざまなビューとテンプレートからどのように構築されていますか?
質問をより具体的にするには:

  • あるURLで受信したGETリクエストの場合、user-search-form、new-post-form、friends-listを一緒に表示するにはどうすればよいですか?
    プロジェクトレベルの共通ビューでこれを行う場合、アプリレベルのビューはどうでしょうか。タグはいくつかの「サブテンプレート」からテンプレートを作成するのに便利
    だと読みましたが、含まれているテンプレートが取るさまざまな変数についてはどうでしょうか。{% include %}
  • 同じURLから送信される可能性のあるユーザー検索関連のGETリクエストと新しい投稿関連のPOSTリクエストをどのように処理できますか?
    (「URLから送信されたリクエスト」という表現は不適切な場合がありますが、ユーザーは特定のURLに表示されたページを操作して別のリクエストを送信できます。)
  • また、さまざまなコンポーネントを切り離しておく必要があります。

注:この質問はSOには一般的すぎる可能性があるため、詳細な回答の代わりに、さまざまなアプリを「実際に」一緒に使用する例を含むソースもいただければ幸いです。

4

1 に答える 1

0

あるURLで受信したGETリクエストの場合、user-search-form、new-post-form、friends-listを一緒に表示するにはどうすればよいですか?

任意のビューから任意のテンプレートをレンダリングするように要求できます。templateDjangoは、登録されているすべてのアプリからディレクトリのテンプレートを検索します。または、を使用して独自のテンプレートディレクトリを指定することもできますTEMPLATE_DIRが、次の質問からすでにこれを知っているようです。

プロジェクトレベルの共通ビューでこれを行う場合、アプリレベルのビューはどうでしょうか。

この質問をもっと詳しく説明していただけませんか?

{%include%}タグは、いくつかの「サブテンプレート」からテンプレートを作成するのに便利だと読みましたが、含まれているテンプレートが取るさまざまな変数についてはどうでしょうか。

ドキュメントから:

インクルードされたテンプレートは、それを含むテンプレートのコンテキストでレンダリングされます。

部分的なテンプレートがある場合は、次のように含めることを目的としています。

# hello.html
<h2>Hello {{ person.name }}</h2>

そして別のテンプレートがそれを含んでいます:

# greeting.html
{% include 'hello.html' %}


render_to_response('greeting.html', {})

テンプレートコンテキストにHelloがないため、出力は次のようになりますperson

あなたの2番目の箇条書きがよくわかりません。djangoパッケージは単なるpythonパッケージです。2つのアプリがある場合は、2つの異なるアプリからモジュールをインポートして、任意の方法でコードをインポートできます。

たとえば、ほとんどのプロジェクトで、私はcommonアプリを持っていることになります。これには通常、djangoプロジェクト全体で使用されるユーティリティが含まれています。通常、基本テストクラスが含まれています。

アプリでは、インポートするだけです

from yourproject.common.utils import a_function

djangoの分離を支援するために、シグナルフレームワークが提供されます。アプリは信号を送受信できます。

Djangoには、フレームワークの他の場所でアクションが発生したときに、分離されたアプリケーションに通知を受け取ることができる「シグナルディスパッチャー」が含まれています。一言で言えば、シグナルにより、特定の送信者は、何らかのアクションが発生したことを一連の受信者に通知できます。これらは、多くのコードが同じイベントに関心を持つ可能性がある場合に特に役立ちます。

于 2013-03-12T23:44:56.860 に答える