2012-01-30 10 views
0

私は基本的なコンセプトが欠けていると思います。 1がコンテンツを提供し、他のプレゼンテーションを提供して言う -2つのアプリケーションがDjangoの同じURLにどのように応答できますか?

http://localhost/myproj/app1/33 
http://localhost/myproj/app2/newcomment.html 

しかし、どのようなメカニズムは、2つのアプリが相補的であるケースを処理するために存在します。ステレオタイプのDjangoプロジェクトでは、2つのアプリケーションが異なるURLに応える必要があるだろうか?または、1つはコンテンツであり、もう1つはあらゆるページに表示されるような静的で横幅のコンテンツです。

特に、両方のアプリがテンプレート継承を使用して同じテンプレートを拡張する方法を理解できません。

{% extends "baseapp/templates/base.html" %} 

{% block content %} 
<div class="banner">Please support our site!</div> 
{{ block.super }} 
{% endblock %} 

{% extends "baseapp/templates/base.html" %} 

{% block content %} 
... here's the actual content... 
{% endblock %} 

App2のが少しバナーか何かを追加します。

... 
<div blah blah> 
{% block content %} 
{% endblock %} 
... 

App1のは、それを拡張:ベースアプリ "baseappは" テンプレート "base.html" とあります想像してみてでは、両方のテンプレートが表示される方法は何ですか?私は考えることができます:

  1. app1 app2のテンプレートを拡張することができます。しかし、これは間違っていると思われます.app1はコンテンツプロバイダであり、app2のようなものには依存しないでください。
  2. app2はapp1のテンプレートを拡張できます。しかし、これは間違っているようです:私は正しく理解していれば、URLスキームはapp2を介してすべてのURLを漏らさなければならないでしょう
  3. ミドルウェア?

私が言ったように、私はおそらく非常に基本的なものを欠いているでしょう。それとも私は、私が知らない非常に間違った仮定をしています。 (この質問は、Embed an optional Django application in another page, if that app is presentHow to capture and display information external to my webapp, but relevant to users of it?の後の3回目の試みです)問題のフレーミングに問題があります。

+0

あなたの第二のアプリはテンプレートタグです。あなたの最初の試みで提案されたものです。 –

+0

オクラホン - 私はよく見るでしょう。 –

答えて

0

私は実際にここに欠けていたものだと思う:

  • アプリはちょうどサブディレクトリ内の右の名前のテンプレートを含めることにより、テンプレートを上書きすることができます。 Djangoのドキュメントでは、これを明確にはしていません.Adaptiveテンプレートのコンテキストでこの機能を参照しています。
  • 上記のようにテンプレートを上書きすると、拡張することはできません。
  • スニペットは、テンプレートをオーバーライドして、それを拡張することができます両方:http://djangosnippets.org/snippets/1376/

はここで密接に関連する質問です:Django: Overriding AND extending an app template

2

URLにはアプリケーションが応答しません。ビューは、任意のアプリのモデル、フォーム、その他のオブジェクトを使用できる機能です。ここに問題はありません。

テンプレートに何かを追加したい場合は、継承だけではありません。カスタムcontext processorまたはカスタムtemplate tagを使用する方がよいでしょう。

+0

私はちょうどあなたの最初の文と全く同じものを投稿するつもりでした:-) –

+0

しかし、通常、アプリにはviews.pyの権利が含まれていますか? 「問題はありません」と言えば、保守性、相互運用性、ほとんど関係のない問題間の依存関係の削減などの問題を考えていると思います。 –

+0

@SteveBennett特に問題は、コンテキストプロセッサ/テンプレートタグを使用して解決します。 (一般的に)あなたのアプリを疎結合にしたい場合は、あなたのアプリをビューに接続する別のアプリを作成してください。私は実際にこの問題を経験したことはありません。 – DrTyrsa

関連する問題