使用Django的Angular JS部分和静态文件

时间:2014-07-22 01:20:14

标签: django angularjs amazon-s3

我一直在网上搜索这个特定问题的答案,我很惊讶我在这个问题上找不到多少。我有一个Django网站,我正在重做使用Angular作为前端,Django作为后端,这似乎是一种常见的做法。但是,我发现的所有例子都没有解决生产中静态路径变化的问题。我有一个生产中的S3桶。因此,使用路径static/whatever/maybesomecss/oranimage不适用于部分或尝试使用$ resource将一些数据存储在.json文件中。

以下是一些代码来说明我在说什么。

    .state('math', {
        url: '/math',
        templateUrl: 'games/math',
        controller: 'MathController'
    })
    .state('secretgame', {
        url:'/secretgame',
        templateUrl: 'static/js/games/Partials/secretgame.html',
        controller: 'secretController'
    })

在上面,如果有一个Django URL可以点击游戏/数学。但是我不希望人们能够直接进入它,它会搞砸(这是一个单独的问题),而且无论如何我宁愿在这里使用部分。 ' secretgame'工作,但该templateUrl不会在生产中工作。因为S3存储桶基本上取代了静态'静态。

一种解决方案是将我正常使用的STATIC_URL设置粘贴到全局javascript变量中,然后使用类似templateUrl: staticUrl + js/games/partials/secretgame.html的内容,但这看起来并不好。

有没有人处理过这个问题?如果我还有其他信息,请告诉我。

只是为了澄清:对于部分,使用{%verbatim%}将Django模板与AngularJS分开是不可行的。对于你从Django URL加载的东西来说这很好,但不是部分的,这完全由AngularJS使用。

2 个答案:

答案 0 :(得分:1)

在使用django和angular之前,我不得不处理这类问题。正如你所说,你可以使用JS全局而只是前置,但这很草率。

虽然它是一致的,但我认为更简洁的解决方案是使用您在初始页面加载时使用django创建的辅助函数。

您可以编写templateUrl: 'static/js/....'或者甚至可以使用jsUrl,cssUrl等等进一步编写templateUrl: staticUrl('js/...'),而不是编写{{1}}。

答案 1 :(得分:0)

这个GitHub项目似乎可以解决这个问题:

https://github.com/appliedsec/djangular

特别是,请查看此文件: https://github.com/appliedsec/djangular/blob/master/djangular/templates/djangular_module.js

STATIC_URLMEDIA_URL注入JavaScript。