我正在使用AngularJS
应用Django Rest Framework
。但是,我已经设置了我的项目,以便Angular页面在我的设置的templates
文件夹中提供,以便
url(r'^$', index)
def index(request):
return render(request, 'index.html', {})
我在Django的/
网址上运行了角度应用,并设置了我的ngRoutes
,如下所示:
var sgApp = angular.module('sgApp', [
'ngRoute',
]);
sgApp.config(['$routeProvider','$locationProvider',
function($routeProvider, $locationProvider){
$routeProvider.when('/',{
templateUrl: '/static/partials/index.html'
});
$locationProvider.html5Mode(true);
}
]);
但是,当我尝试访问localhost:8000/some-random-url
这样的无效网址时,它会重定向到Django内置的404
页面。我有办法解决这个问题吗?或者我是否必须从其余框架中完全抽象角度应用程序?
答案 0 :(得分:4)
您需要在angularjs路由器中添加默认路由值(otherwhise
)
sgApp.config(['$routeProvider','$locationProvider',
function($routeProvider, $locationProvider){
$routeProvider.when('/',{
templateUrl: '/static/partials/index.html'
})
.otherwise({
redirectTo: '/'
});
$locationProvider.html5Mode(true);
}
]);
然后将其添加到urls.py
url(r'^.*$', index),
这意味着如果请求的网址与之前的网址规则不匹配,请重定向到index
。请注意*
^.*$
答案 1 :(得分:1)
对于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'
其中index是最后一条路线。