在AngularJs routeProvider中使用Django URL

dar*_*rse 13 javascript python django angularjs

对于一个项目,我在后端使用Django,在前端使用AngularJs.

基本上,我想要的是仅在url开头时运行Angular应用程序projectkeeper/.

换句话说,假设我的网站是example.com.我希望角度应用程序为URL运行example.com/projectkeeper/dashboard/,example.com/projectkeeper/projects/依此类推,但不是example.com/about/.

希望我已经清楚了.无论如何,为了做到这一点,我正在使用我的代码执行以下操作:

urls.py

urlpatterns = [
    url(r'^projectkeeper/$', TemplateView.as_view(template_name='base.html')),
]
Run Code Online (Sandbox Code Playgroud)

在模板base.html中,我明显地提到了我的角度应用程序.对于角度路由,我做了以下事情:

myapp.config(['$routeProvider', function($routeProvider) {
    $routeProvider
        .when('/dashboard/', {
            title: 'Dashboard',
            controller : 'DashboardController',
            templateUrl : 'static/app_partials/projectkeeper/dashboard.html'
        })
        .otherwise({ redirectTo : '/' });
}]);
Run Code Online (Sandbox Code Playgroud)

所以,理想情况下,我认为example.com/projectkeeper/#/dashboard/将从我的角度应用程序运行DashboardController.但是,情况并非如此,我只得到一个空页面,这意味着路由不正确.

对此有何解决方案?正如我之前所说的,我想要的是在url开头时运行Angular应用程序projectkeeper/.

Or *_*uan 4

我认为你已经非常接近了,几乎没有什么事情可以让它发挥作用(老实说,这很难理解,我希望我没有忘记任何事情)。

首先,您的 URL 顺序很重要,如果您在角度路由之前定义某些内容,它们将首先呈现,因此请在角度路由之前使用 django 应用程序的 url。

然后,如果你想让 Angular 了解子路径,你需要<base>在标头中定义标签。在你的情况下:

<base href="/projectkeeper/" />

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

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

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