次の問題があります。ユーザーが私のWebサイトでコースを受講しています。コースはいくつかの章で構成され、各章はいくつかのステップで構成されています。ユーザーがログインしてステップを完了すると、バックエンドが進行状況を保存します。ユーザーがサイトに戻ってきたら、中断したところから続行してほしい。これを行うには、cssクラス「アクティブ」を対応するナビゲーションステップと各章のコンテンツタブに追加する必要があります。私の出発点は、ユーザーがすでにステップを完了しているかどうかをifステートメントでテストすることでした。これはうまく機能しましたが、まだ完了していないすべてのステップに.activeを追加します。まだ終わっていない最初のステップに追加したいだけです。私は実際にこの問題を解決しましたが、それはかなり野蛮なハックであり、テンプレートに変数を設定できるカスタムテンプレートタグ:
{% load custom_tags %}
{% for chapter in chapters %}
<div>
<ul class="unstyled wizard clearfix">
{% set active_wizard_steps = 0 %}
{% for step in chapter.steps.all %}
<li class="{% if not step.read and active_wizard_steps == 0 %}active{% set active_wizard_steps = 1 %}{% endif %}{% if step.read %} finished{% endif %}"></li>
{% endfor %}
</ul>
</div>
{% endfor %}
これは、すべてのアクティブなステップを含むリストまたはdictをテンプレートに渡し、ステップがそのリストにあるかどうかをテンプレートでテストすることによっても実行できることを知っています。しかし、それは多くのビューコードを書き直すことを意味するので、テンプレートで完全に書き直すことにしました。
だから私の質問は:この問題を解決するためのベストプラクティスの方法は何でしょうか?不思議なことに、問題を理解するのが本当に楽しかったので、私は尋ねています。どうもありがとう!