对于一个项目,我在后端使用Django,在前端使用AngularJs。
基本上,我想要的是仅当网址以projectkeeper/
开头时才运行Angular应用。
换句话说,假设我的网站是example.com。我希望针对网址example.com/projectkeeper/dashboard/
,example.com/projectkeeper/projects/
等运行角度应用,但不要在example.com/about/
上运行。
希望我已经说清楚了。无论如何,为了做到这一点,我正在使用我的代码执行以下操作:
urls.py
urlpatterns = [
url(r'^projectkeeper/$', TemplateView.as_view(template_name='base.html')),
]
在模板 base.html 中,我明显地提到了我的角度应用。对于角度路由,我已经完成了以下操作:
myapp.config(['$routeProvider', function($routeProvider) {
$routeProvider
.when('/dashboard/', {
title: 'Dashboard',
controller : 'DashboardController',
templateUrl : 'static/app_partials/projectkeeper/dashboard.html'
})
.otherwise({ redirectTo : '/' });
}]);
所以,理想情况下,我认为转到example.com/projectkeeper/#/dashboard/
会从我的角应用程序运行DashboardController。但是,情况并非如此,我只得到一个空页面,这意味着路由不正确。
对此有何解决方案?正如我之前所说,我想要的是当网址以projectkeeper/
开头时运行Angular应用 。
答案 0 :(得分:4)
我认为你很接近,没有什么可以使这个工作(老实说,这是令人困惑的理解,我希望我没有忘记任何事情。)
首先,您的网址顺序很重要,如果您在首先渲染它们的角度路线之前定义了一些内容,那么请使用您的django应用程序的网址之前角度路线。
然后,如果您想让角度知道子路径,则需要在标题中定义<base>
标记。在你的情况下:
<base href="/projectkeeper/" />
(您也可以在所有projectkeeper
函数中定义where
。
对于网址,我会将正则表达式更改为:r'^projectkeeper/.*'
。同样,应该是您的网址列表中的最后一个。
您会遇到其他问题,例如{{ }}
,身份验证问题,但这些问题会留给不同的答案:)
答案 1 :(得分:0)
试试这个用于angularJS的ui路由器 https://github.com/angular-ui/ui-router
对于您目前面临的嵌套视图和问题,它会更有帮助。