0

だから私はDjangoにかなり慣れていないので、いくつかの簡単なWebサイトを作成しています. 現在、他のアプリのいくつかをホストするために使用できる Web サイトを作成しようとしています。現時点では、メイン サイトは名前/URL の辞書をテンプレートに渡すことでナビゲーション バーをレンダリングします。たとえば、これはメイン Web サイトの views.py です。

from django.shortcuts import render_to_response

navbar = [{'Home': '/'},
          {'Apps': '/apps/'},
          {'Dropdown': '',
          'Google': 'http://www.google.com',
          'Stackoverflow': 'http://www.stackoverflow.com'}]

context = {'navbar': navbar}


def home(request):
    return render_to_response("website/home.html", context)


def apps(request):
    return render_to_response("website/applist.html", context)

これにより、ホーム ビューとアプリ リスト ビューの両方に、website.com/、website.com/apps/ へのリンクを含むナビゲーション バーと、google および stackoverflow へのリンクを含む「ドロップダウン」というタイトルのドロップダウンが表示されます。

私の問題は、独自のコンテキスト値を使用して他のテンプレートにレンダリングする独自のビューを持つ別のアプリを作成したことです。たとえば、次のように使用できます。

def appview(request):
    ## view logic...
    context = {"users": users, "comments": comments}
    render_to_response("app/response.html", context)

必要に応じて、"app/response.html" を "website/apprender.html" に置き換える引数を取るようにアプリを切り替えることができます。

def appview(request, template):
    ## view logic...
    context = {"users": users, "comments": comments}
    render_to_response(template, context)

ただし、コンテキストにはまだユーザーとコメントのみが含まれ、ナビゲーションバーの情報は含まれません。アプリが追加する入力コンテキストに別の引数を追加する必要があると考えています。

def appview(request, template, context):
    ## view logic...
    context["users"] = users
    context["comments"] = comments
    render_to_response(template, context)

しかし、ベストプラクティスが何であるかを知りたいです。では、ベストプラクティスは何ですか?

4

1 に答える 1

0

何かを処理するためのベストプラクティスは議論の余地があります。navbar を作成するときは、次のいずれかをお勧めします。

  • ナビゲーション バーをテンプレート タグとして実装します。テンプレートタグは、任意のテンプレートにロードして、プロジェクト全体で一貫したナビゲーション バーを生成するか、base.html に含めることができます。この navbar にフックしたい場合は、templatetag が追加のメニューのリスト、または既存のメニュー構造のデルタ値であるパラメーターにタグ付けできるようにすることで、それを行うことができます。

  • navbar を変更しない場合の別の解決策は、他のテンプレートが継承する base.html ファイルに直接コーディングすることです。navbar を変更するには、いずれにしてもプロジェクトへの新しいコミットが必要であり、複雑なテンプレート ロジックを使用して HTML を生成することを避けることができます。

于 2013-05-03T17:39:59.767 に答える