答えが聞こえるほど状況は本当に絶望的ですか?
かなり。しかし、以前は Django ベースでしたが、現在は Backbone ベースになっているサイトで作業しているので、いくつかの考えを提供できます。
/italy/1-week/from-500-to-1000/ のような URL のルーティング - 国/期間を取得するために、Django の urls.py に 1 つ、バックボーンのルーターに 1 つ、2 セットのルーティング コードを記述する必要がありますか? /価格パラメータ?
はい。ただし、重複を最小限に抑える方法はあります。私たちが取ったアプローチは、Django にすべての URL を JS 変数としてメインの HTML ページ テンプレートに出力させることでした。
<script>
URLS.report_error = "{% url app.log_client_error_view %}";
URLS.access_file = "{% url app.access_file_view 12345 %}";
</script>
これで、生成するすべての URL のパラメーターに 12345 を使用するパターンができました。これにより、基本的に に置き換えることができるため、その URL をバックボーン ルートの正規表現に簡単に変換し直すことができ12345
ます([^/]+)
。
完全な開示のために、「手作業で」書かれたルート正規表現がたくさんありますが、これはそれらを自動化できなかったからではありません。Django 側から離れようとしているだけなので、そのコードをクリーンアップする理由はありません。両方のサポートについてハードコアになりたい場合は、非常に簡単でシンプルな翻訳スキームを考え出すことができるはずです。
パラメータに基づくデータのフィルタリング - これを行うには、views.py に 1 つ、Backbone に 1 つの 2 つの別々の方法を記述する必要がありますか? (少なくとも、両方の呼び出しに 1 つの API を使用できると思います。)
これは、Backbone/Django だけでなく、どのサイトでも基本的に避けられない問題です。クライアント側を信頼することはできないため、サーバー側でデータをフィルタリングする必要があります (たとえば、ユーザーが JS を無効にする可能性があります)。同時に、サーバー側のみのフィルタリングは 1990 年代のものなので、クライアント側でもフィルタリングするためのロジックを作成 (複製) する必要があります (そうすれば、待機せずに「フィールド X を提供するのを忘れました」とユーザーに伝えることができます)。サーバーへの往復の場合)。
ただし、この重複を制限する方法があります。私自身はこの作業を行っていませんが、同僚が Django フォームを奇妙な方法で使用していたことを知っています (彼は Django が提供するフォームを使用し、それらをバックボーン ビューのテンプレートとして使用する前に少し解析しました)。これで重複が完全になくなるわけではなく、残念ながら詳細を思い出せませんが、役に立ちました。
テンプレートでのレンダリング - Django 用に 1 つのリスト テンプレートを作成し、Backbone 用に別のリスト テンプレートを作成する必要がありますか? それとも両方で同じテンプレートを使用できますか?
Handlebars テンプレートは、変数 ( ) だけを実行している場合、Django テンプレートと同様の構文を持ちます{{foo}}
。ロジックを共有したい場合、2 つの構文はわずかに異なります ( {% if foo %}
vs. {{#if foo}}
) が、少しの解析作業を気にしなければ、簡単に変換できるほど十分に近いものです。
そうです、ユーザーの非常に小さなサブセット (バックボーンをサポートできないブラウザーを使用しているユーザー) をサポートするためだけに、多くの作業を行っていることになります。Google Analytics などでユーザーのブラウザ統計を調べて (または、サイトがまだ稼働していない場合は、一般的な Web 統計を調べて)、ユーザー ベースのごく一部にとって、これらすべての問題が本当に価値があるかどうかを判断することを強くお勧めします。 . 統計がなければ、そのパーセンテージがどれほど小さいかを知ることはできず、明らかにその決定の重要な要素です.
私たちにとっての選択は明白でした。ユーザーに今世紀に作られたブラウザを使用するように要求し (Backbone が必要とするものはほぼすべて)、すべての Backbone を使用するだけです。しかし、その選択があなたにとってそれほど明白でない場合... Django とバックボーンのコードを DRY しようとして頑張ってください :-)