1

サイトの多くの部分で使用している という親テンプレートがありbase.htmlます。このテンプレートには、ユーザーがさまざまな種類のコンテンツをアップロードできるようにするさまざまなフォーム (モーダル ウィンドウ内) をトリガーするボタンなど、多くの機能コンポーネントが含まれています。 ユーザーがサイトのほぼすべての部分からこれらのボタンをクリックできるようにしたいと考えています (から継承するすべてのテンプレートからbase.html)。

サイトのメイン ページを処理するビューを作成しました(を継承し、 をHomeViewレンダリングします)。このビューには、すべてのアップロードを処理する一連の機能を記述しました。homepage.htmlbase.html

多くのテンプレートが から継承されるbase.htmlため、すべて同じ機能を備えているため、 から数百行のコードをコピーしてHomeView、他のすべてのページをレンダリングするビューに貼り付ける必要がありますか??

もっと良い方法があるはずですよね?

親の基本テンプレートの機能が、この基本テンプレートから継承する子テンプレートを呼び出すすべてのビューに当てはまることを確認するにはどうすればよいですか?

4

5 に答える 5

1

コードのすべての行をHomeView別の関数 let befunc
func入れ、必要なすべてのコンテキスト変数を含む辞書を返し、必要な
ときにいつでも呼び出すことができるので、次のHomeViewようになります。

def HomeView(request):
  dict = func(request)
  ... # rest of code that is not common with other views

そしてあなたfuncは次のようになります:

def func(request):
  #all repeated code
  #put all needed variables in a dictionary and return it
  dict = {'var1': 4, 'var2': "a String" ...}
  return dict
于 2013-02-03T18:39:27.620 に答える
0
  1. TemplateResponseの代わりに使用HttpResponsehome_viewます。このようにして、コンテキストを更新し、応答のテンプレートを切り替えることができます。

  2. home_viewこのような他のビューの内部を呼び出します。

    from django.template.response import TemplateResponse
    
    def other_view( request ):
    
        #produce other_context
    
        t = home_view( request )
        t.context.update( other_context )
        t.template = 'other_template.html'
        return t
    
于 2013-02-01T09:34:24.453 に答える
0

各または使用要求セッションで一意の値を要求することにより、1 つのビューで多くのテンプレートをレンダリングできます。

于 2013-02-01T11:37:38.053 に答える
0

base.html に ajax を使用して機能部分をロードします。

そうすれば、これらの機能のみを扱う view_method を使用できます。

于 2013-02-01T12:27:24.243 に答える
0

アップロード関連の機能を別々のビューに分離することが、より良い方法になると思います。そうすれば、すべてのテンプレート (から継承base.html) が、アップロードに適したビューを参照します。

ヘッダーを使用HTTP_REFERERして、アップロード ビューから適切なページにリダイレクトできます。

于 2013-02-01T04:21:21.587 に答える