在AngularJs中使用Django URL routeProvider

时间:2017-02-06 06:11:49

标签: javascript python angularjs django

对于一个项目,我在后端使用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应用

2 个答案:

答案 0 :(得分:4)

我认为你很接近,没有什么可以使这个工作(老实说,这是令人困惑的理解,我希望我没有忘记任何事情。)

首先,您的网址顺序很重要,如果您在首先渲染它们的角度路线之前定义了一些内容,那么请使用您的django应用程序的网址之前角度路线。

然后,如果您想让角度知道子路径,则需要在标题中定义<base>标记。在你的情况下:

<base href="/projectkeeper/" />

(您也可以在所有projectkeeper函数中定义where

对于网址,我会将正则表达式更改为:r'^projectkeeper/.*'。同样,应该是您的网址列表中的最后一个。

您会遇到其他问题,例如{{ }},身份验证问题,但这些问题会留给不同的答案:)

答案 1 :(得分:0)

试试这个用于angularJS的ui路由器 https://github.com/angular-ui/ui-router

对于您目前面临的嵌套视图和问题,它会更有帮助。