1

私はbackbone.jsとdjangoをDjango-restframeworkと一緒に使用するときに設定されるルーティングとURLについてひどく混乱しています。

  1. RESTフレームワークを使用する場合、テンプレートはどこに適合しますか?

divたとえば、表示されている学生を更新するためにbackbone.jsを使用したいURLの1つにクラスベースのビューが定義されています。

url(r'^home/students/$', views.StudentList.as_view()),

class StudentList(APIView):
    """
    List all students
    """
    def get(self, request, format=None):
        students = Person.objects.filter(person_type = Person.STUDENT)
        serializer = PersonSerializer(students)
        return Response(serializer.data, "core/teachers/teacher_teaching.html")

    def pre_save(self, obj):
        obj.owner = self.request.user
  • バックボーンルートは、djangoのURLルーティングとどのように適合しますか。私はファイルrouter.jsに次のようなものを持っています:

    function($,jqueryui, _, Backbone, HomeView, StudentsView) {
    
    var AppRouter = Backbone.Router.extend({
        routes: {
            // Define some URL routes
            ':home': 'showStudents',
            'users': 'showContributors',
    
            // Default
            '*actions': 'defaultAction'
        }
    });
    
    var initialize = function(){
    
        var app_router = new AppRouter;
    
        app_router.on('route:showStudents', function(){
    
            // Call render on the module we loaded in via the dependency array
            var studentsView = new StudentsView();
            studentsView.render();
        });
    

それでも、ルートが実際に私の見解に到達することはありませんか?

4

1 に答える 1

6

RESTフレームワークを使用する場合、テンプレートはどこに適合しますか?

そうではありません。Djangoテンプレートは通常のDjangoHTMLページ用であり、RESTフレームワークAPI用ではありません。RESTフレームワークAPI応答は、プログラムで生成されたドキュメント(通常はJSONまたはXML)であるため、テンプレートは必要ありません。

バックボーンルートはdjangoのURLルーティングとどのように適合しますか

それらは100%完全に分離されています。次のようなURLがあるとします。

www.example.com/foo/bar#baz

DjangoはそのURLのこれだけを処理します:

www.example.com/foo/bar

バックボーンが残りを処理します:

#baz

もちろん、これはDjangoがBackboneを使用するWebページを返すことを前提としています。そうでなければ、#baz意志は決して遊びに来ません。

簡単にまとめると、上記のようなURLにアクセスすると、ブラウザは。を要求www.example.com//foo/barます。これはurls.py、Djangoにいるときです。それは持っています:

url(r'^foo/bar/?$', views.FooBar.as_view()),

そのため、Webサーバーはそれを提供するものは何でも返送することを知っていますviews.FooBar.as_view()(それがRESTフレームワークで生成されたJSONドキュメントであるか古い学校のDjango HTMLドキュメントであるかは関係ありません)。

そのドキュメントがサーバーに返されると、それがレンダリングされます。ここで、Backboneやそのルーターなどのクライアント側のコードが順番に使用されます。バックボーンルーター(呼び出すときはいつでもBackbone.history.start())はURL(つまり、)window.locationを調べ、URLのアンカーまたは「ハッシュ」部分(たとえば)を探します#baz。次に、URLのその部分をルートリストと比較し(Webサーバーが前の部分をurls.pyと比較したのと同様)、一致するものが見つかった場合は「ページに送信」します。

ただし、理解することが重要ですが、実際にはどこにも送信されません。実際に行うのは、URLのハッシュ部分を変更してから、DOMを操作するJavascriptを実行することだけです。したがって、バックボーンルーターがDjangoURLに送信することは不可能です。サーバールートをヒットする場合は、AJAXまたはを使用する必要がありますwindow.location =

于 2013-03-03T21:22:03.610 に答える