2

私はdjangoでアプリを開発していて、backbone.jsを使用しています。URLは、バックボーンルーターを使用してルーティングされます。私のHTMLは1つの静的ページにあります。たとえばhref="/user/home"、ページが読み込まれ、URLでブラウザを更新(httpリクエストを送信)すると、djangoのURLにそのURLがないため、エラー404が発生します。

Facebook(django_facebook)を使用してログインし、Facebookサインインのリンクをクリックするたびに、空白のページが表示されるシナリオがあります(この*スプラットが原因で他の無効なURLが実行するのと同じように-{"*action" : "defaultRoute"}以下のコードを参照してください) )、そしてブラウザを更新するとurl(r'^facebook/', include('django_facebook.urls'))、URLS.PYに、があるので、それは機能します(ログインのためにfbタブを開きます)。

私の問題は、リンクをクリックしてfbタブまたはポップアップウィンドウを開く方法です。この場合は機能しないため、機能させるにはブラウザでURLを押す必要があります。

backbone.jsルーター

Api.Routers.MainRouter = Backbone.Router.extend({
routes: {
    ":user/messages/:action/:target": "messagesAction",
    ":user/challenge/:action/:target" : "gameScores",
    ":user/challenge/:action/:target/:bet" : "challengeResult",
    ":user/challenge/:action": "challengeAction",
    ":user/:action" : "userAction",
    ":user/friends/:action/:target" : "friendsAction",
    "*action" : "defaultRoute"
},
messagesAction: function (user, action, target) {
    myScrollAction = action;
    conversationAction (action);
    //HIGHTLIGHT FOOT NAV
    $(".selected").removeClass("selected");
    $("#nav-messages").parents("li").addClass("selected");

    $(".message-friend-name").html(target.replace(/%20/g, " "))
},
challengeResult: function (user, action, target, bet) {
    defaultRouterAction (action);
    myScrollAction = action;
    ...

ありがとう。

4

1 に答える 1

0

ここで 2 つの質問をしているようですね。

最初の質問は、Django アプリにないルートがバックボーン ルーターにあるという事実に関するものです。

したがって、ルーターが引き継ぐと、実際に新しい履歴がブラウザーの履歴スタックにプッシュされます (ハッシュ フラグメントを使用するときに IE8 & 9 を使用している場合を除く)。これは、リロードを押すと、ブラウザーがサーバーからそのリソースを要求することを意味します。

404 が発生しないようにするには、履歴オブジェクトを使用しないか、バックボーン ルーターに存在するすべてのルートが Django URL 構成でミラーリングされるようにする必要があります。

2 番目の質問は、Facebook ログインの使用に関するものです。質問のこの部分を分けて再質問する必要があります。これは、使用している Django プラグインにも関係しているためです。そうすると、より良い牽引力が得られます。

于 2012-12-06T19:36:58.960 に答える