【发布时间】:2015-10-13 17:15:37
【问题描述】:
我们将 AngularJS 嵌入到我们的 Django 应用程序中,URL 路由由 AngularJS ui-router 处理。使用 ui-sref 在局部之间导航并在应用程序内四处点击,一切正常。
return $stateProvider.state('root.dashboard', {
abstract: true,
url: 'dashboard/'
}).state('root.dashboard.profile', {
url: 'profile/',
views: {
'@': {
templateUrl: Urls['dashboard:profile'](),
controller: 'ProfileController'
}
}
}).state('root.dashboard.home', {
url: '',
views: {
'@': {
templateUrl: Urls['dashboard:dashboard_home'](),
controller: 'DashboardController'
}
}
...
问题是当用户导航到非根页面(例如http://example.com/dashboard/profile/),并且用户刷新浏览器、重新加载浏览器的 URL 或直接将非根 URL 粘贴到浏览器。在这种情况下,用户不会在浏览器中加载保留相同 URL 的页面,而是被重定向到根页面 (http://example.com/dashboard/)。
由于路由是由 Angular 处理的,在服务器端我们没有为那些非根 URL 定义任何 url 路由;相反,我们有将 404 重定向到根页面的中间件:
class Redirect404(object):
def process_response(self, request, response):
if response.status_code != 404 or request.method != 'GET':
return response
return HttpResponsePermanentRedirect('/dashboard')
我们希望路由器能够保持原始 URL 并将用户带回原始页面(即“dashboard/profile”)。请注意,我们在 Angular 中设置了 HTML5Mode,如下所示:
$locationProvider.html5Mode = true;
我们的理解和/或设置存在一些错误,希望得到澄清。
【问题讨论】:
标签: javascript angularjs django redirect angular-ui-router