Djangoアプリケーションの適切な構造を理解するために少し苦労します。特に、私はその意見を頭に浮かべるのに苦労している。Djangoアプリケーションの正しい構造とビューとサブビューの処理
だから私は、このファイル
base.html
を持っていると私は、このファイルは、これまでのところは良いなど、フッター、ナビゲーションバー、頭など、アプリケーション全体の共通要素
を持っていることがわかっています。私base.html
ファイル内 私はタグがあります:
{% block content %}
{% endblock %}
アプリケーションの動的コンテンツを処理します。 は、今私はhome.html
と呼ばれる静的なページを作成し、そのファイル内に、私は
{% extends 'base.html' %}
... Whatever I want
{% block content %}
を入れて、今、私は本当にそれがどのように動作するかを理解するのに苦労パーツを付属しています。 dashboard
という新しいアプリを作成します。 dashboard.html
ファイルを作成し、home.html
と同様に、ベースを拡張しますが、要素はcontent block
内に拡張します。生成されたアプリケーションのviews.py
では、私は定義:
@login_required(login_url="login/")
def dashboard(request):
return render(request, "dashboard.html")
とdashboard.html
{% extends 'base.html' %}
{% block content %}
<div class="dashboard-page">
<div class="row equal-sides">
<div class="col-sm-2 trim-right">
{% include 'dashboard_navigation.html' %}
</div>
<div class="col-sm-10 trim-left">
<div class="dashboard-main card">
<h3>Welcome to your dashboard</h3>
</div>
</div>
</div>
</div>
{% endblock %}
幸せな日。今度は、左側のナビゲーションバーからの選択に応じて、右側のメインコンテナのみをリロードします。どのように達成するのですか?
URLファイル内に新しいURLを追加し、views.py
ファイル内の対応するビューを追加すると、それはすべてうまくいくと思いました。
def single_search(request):
tweets = get_tweets()
context = {'tweets': tweets}
return render(request, "search.html", context)
urls.py
url(r'^dashboard', views.dashboard, name='dashboard'),
url(r'^dashboard/search$', views.single_search, name='search'),
しかし、私が取得することは、私は問題を回避移動して、次のコードを使用して「適切な」コンテンツを表示するために管理dashboard.html
と同じページです:
{% extends 'base.html' %} {% block content %}
<div class="dashboard-page">
<div class="row equal-sides">
<div class="col-sm-2 trim-right">
{% include 'dashboard_navigation.html' %}
</div>
<div class="col-sm-10 trim-left">
<div class="dashboard-main card">
{% if 'search' in request.path %}
{% include 'search.html' %}
{% else %}
<h3>Welcome to your dashboard</h3>
{% endif %}
</div>
</div>
</div>
</div> {% endblock %}
しかし、私はそれが正しい方法ではないことを知っています。私が渡している文脈は、それがinclude 'search.html'
タグの中にあるという事実のために返されていないことも知っています。ダッシュボード内で同じコンテキストを渡すと、search.html
とdashboard.html
の両方で動作しますが、残念ながらユーザーがsearch.html
サブページにある場合にのみそのコンテンツが表示されます。
また、私は自分のアプリケーションの木を追加します。
私はあなたの助けを本当に感謝します。
おかげで、
エイドリアン
説明のために:Djangoは、提供されたURLと一致する正規表現が見つかるまで、可能なビューのリストをダウンします。それが終わると、それは検索を停止し、あなたをそのビューに送ります。 'search'ビューがURLリストの' dashboard'ビューの前に置かれていれば、 'search'ビューが最初に見つかったため、実際にはうまくいきました。ダニエルが指摘したことは、オーダーがビュールーティングの決定要因にならないようにするためのベストプラクティスです。 – MCBama
聖なる牛!多くのありがとう、ダニエル!あなたの解決策は私の問題を解決しました。 –