在AngularJS和Django中使用html5Mode true

在AngularJS和Django中使用html5Mode true,django,angularjs,Django,Angularjs,我正在使用一个带有Django Rest框架的AngularJS应用程序。但是,我已经设置了我的项目,以便从设置的templates文件夹中提供角度页面,以便 url(r'^$', index) def index(request): return render(request, 'index.html', {}) 我正在Django的/url上运行angular应用程序,并已将我的ngRoutes设置如下: var sgApp = angular.module('sgApp', [

我正在使用一个带有Django Rest框架的
AngularJS
应用程序。但是,我已经设置了我的项目,以便从设置的
templates
文件夹中提供角度页面,以便

url(r'^$', index)

def index(request):
    return render(request, 'index.html', {})
我正在Django的
/
url上运行angular应用程序,并已将我的
ngRoutes
设置如下:

var sgApp = angular.module('sgApp', [
        'ngRoute',
    ]);

sgApp.config(['$routeProvider','$locationProvider',
    function($routeProvider, $locationProvider){
        $routeProvider.when('/',{
            templateUrl: '/static/partials/index.html'
        });
        $locationProvider.html5Mode(true);
    }
]);

但是,当我试图访问一个无效的url,例如
localhost:8000/某个随机url
,它将重定向到Django的内置
404
页面。我有办法解决这个问题吗?或者我必须从rest框架中完全抽象angular应用程序吗?

您需要在angularjs路由器中添加默认路由值(
otherwhise

然后将其添加到
url.py的底部

url(r'^.*$', index),

这意味着,如果请求的url与任何以前的url规则不匹配,请重定向到
索引
。请注意,对于Django/DRF,在
^.*$

中的
*
中,对于一系列路由,最后一个索引路由为
*$

urlpatterns = patterns(
    '',
    url(r'^api/v1/', include(router.urls)),
    url(r'^api/v1/', include('agents.urls')),
    url(r'^api/v1/', include('utils.urls')),
    url(r'^api/v1/', include('authentication.urls')),
    url(r'^api/v1/', include('products.urls')),
    url(r'^admin/', include(admin.site.urls)),
    url(r'^api-auth/', include('rest_framework.urls', namespace='rest_framework')),
    url(r'^accounts/login', LoginView.as_view(), name='login'),
    url(r'^.*$', IndexView.as_view(), name='index'),
)
handler404 = 'views.handle_page_not_found_404'

索引是最后一条路径。

嘿,既然存在
HTML5模式
,我该如何使API调用工作?每当我尝试进行任何api调用时,它都会返回到
'/'
url,该url位于
$routeProvider
@Newtt中。您是否使用$http进行这些api调用?或者仅仅是broswer?@Newtt您需要将
url(r'^.*$',index)
放在
url.py的底部。这应该是
url.py
中的最后一条规则。哦,是的!最后我又放了一个网址。非常感谢!:)如果你想让它停留在给定的url上呢?例如,访问的url是/orders如果用户刷新它,页面停留在/orders,而没有重定向回索引,我应该怎么做@利维
urlpatterns = patterns(
    '',
    url(r'^api/v1/', include(router.urls)),
    url(r'^api/v1/', include('agents.urls')),
    url(r'^api/v1/', include('utils.urls')),
    url(r'^api/v1/', include('authentication.urls')),
    url(r'^api/v1/', include('products.urls')),
    url(r'^admin/', include(admin.site.urls)),
    url(r'^api-auth/', include('rest_framework.urls', namespace='rest_framework')),
    url(r'^accounts/login', LoginView.as_view(), name='login'),
    url(r'^.*$', IndexView.as_view(), name='index'),
)
handler404 = 'views.handle_page_not_found_404'