Django RestFramework 2和backbone.js路由

Django RestFramework 2和backbone.js路由,django,backbone.js,django-rest-framework,Django,Backbone.js,Django Rest Framework,在使用backbone.js和django以及django restframework时,我对路由和url设置感到非常困惑 当使用REST框架时,模板的位置在哪里 例如,我为我的一个URL定义了一个基于类的视图,我想在其中使用backbone.js更新div显示学生: url(r'^home/students/$', views.StudentList.as_view()), class StudentList(APIView): """ List all students

在使用backbone.js和django以及django restframework时,我对路由和url设置感到非常困惑

  • 当使用REST框架时,模板的位置在哪里
  • 例如,我为我的一个URL定义了一个基于类的视图,我想在其中使用backbone.js更新
    div
    显示学生:

    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();
          });
      
    然而,这些路线从未真正达到我的观点

    当使用REST框架时,模板的位置在哪里

    事实并非如此;Django模板用于普通的Django HTML页面,而不是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返回一个使用主干的网页;如果不这样做,
    #baz
    将永远无法播放

    作为一个简短的总结,当您访问上述URL时,您的浏览器将询问
    www.example.com/
    以获取
    /foo/bar
    。这就是Django中的
    url.py
    出现的时候;它有:

    url(r'^foo/bar/?$', views.FooBar.as_view()),
    
    因此,您的Web服务器知道如何发回
    views.FooBar.as_view()
    提供的任何内容(无论是REST框架生成的JSON文档还是老式的Django HTML文档)

    一旦该文档返回到服务器,它就会呈现它,这就是客户端代码(如主干网及其路由器)的位置。主干路由器(无论何时调用
    主干.history.start()
    )都会查看URL(即
    窗口.location
    )并查找URL的锚或“散列”部分(例如
    #baz
    )。然后,它将URL的该部分与其路由列表进行比较(类似于您的Web服务器将前面的部分与URL.py进行比较的方式),如果找到匹配项,它将“将您发送到页面”

    这是理解的关键,它根本不会把你送到任何地方;它真正做的就是更改URL的哈希部分,然后运行一些Javascript来操纵DOM。因此,主干路由器不可能将您发送到Django URL;如果您想点击服务器路径,则需要使用AJAX或
    window.location=

    当使用REST框架时,模板的位置在哪里

    事实并非如此;Django模板用于普通的Django HTML页面,而不是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返回一个使用主干的网页;如果不这样做,
    #baz
    将永远无法播放

    作为一个简短的总结,当您访问上述URL时,您的浏览器将询问
    www.example.com/
    以获取
    /foo/bar
    。这就是Django中的
    url.py
    出现的时候;它有:

    url(r'^foo/bar/?$', views.FooBar.as_view()),
    
    因此,您的Web服务器知道如何发回
    views.FooBar.as_view()
    提供的任何内容(无论是REST框架生成的JSON文档还是老式的Django HTML文档)

    一旦该文档返回到服务器,它就会呈现它,这就是客户端代码(如主干网及其路由器)的位置。主干路由器(无论何时调用
    主干.history.start()
    )都会查看URL(即
    窗口.location
    )并查找URL的锚或“散列”部分(例如
    #baz
    )。然后,它将URL的该部分与其路由列表进行比较(类似于您的Web服务器将前面的部分与URL.py进行比较的方式),如果找到匹配项,它将“将您发送到页面”


    这是理解的关键,它根本不会把你送到任何地方;它真正做的就是更改URL的哈希部分,然后运行一些Javascript来操纵DOM。因此,主干路由器不可能将您发送到Django URL;如果您想点击服务器路由,您需要使用AJAX或
    window.location=

    +1来获得有关路由的详细解释。最后一个问题是关于你提到的。如果django负责到我的html页面的路由,是否需要backbone.js路由。@Warz:如果该页面有多个分区、选项卡或子页面,这些分区、选项卡或子页面看起来像真正的独立页面,并且您希望可以从浏览器的导航栏访问这些分区、选项卡或子页面,那么是的。好的,如果我的包含(选项卡、子页面…)的页面都有正确的{%url%}定义,难道他们前面永远不会有散列标签“#”,因此主干永远不会读取路由。我真的只想能够识别django和主干中的当前url,django将提供主模板,主干可以使用ajax进行api调用和更新页面的某些部分?“我真的只想能够识别django和主干中的当前url”-“识别”是什么意思?只有服务器可以构建到达客户端的文档,只有客户端可以通过JS修改该文档,因此无论哪一方可以“识别”什么,它们都只能影响各自的领域。因此,顺序是:1)您从服务器请求某个URL 2)服务器发回一个页面(可能是从Django模板构建的,3)页面加载Javascript,包括主干路由器,主干路由器检查您当前所在的URL