【发布时间】:2015-12-05 05:07:03
【问题描述】:
我正在使用 Django 和 AngularJS 构建一个 SPA。
我有很多这样的 ng 模板:
<script type="text/ng-template" id="item.html">
// content
</script>
现在,它们都在一个base.html 文件中,因此模板代码变得混乱。
我想把每个 ng-template 放在它自己的 html 文件中。
以下是我能想到的选项:
1.模板文件夹:逻辑位置是模板文件夹。但是当我尝试引用模板/ng-templates/item.html 之类的模板时,我得到了 404 Not Found。因为 Django 不提供模板,所以它使用模板进行渲染。
2。静态目录:Django 确实从静态目录提供模板。但它有两个缺点:
-
服务器端的东西在单独的 html 文件中不起作用。我的意思是,如果要检查用户是否经过身份验证,则不能这样做:
{% if user.is_authenticated() %}但如果所有这些模板都存储在一个
base.html中,那将很容易实现。原因很清楚。 -
生产中的问题。我想从 Amazon S3 提供我所有的静态文件并配置我的设置来做到这一点,这意味着当我这样做时
{% static 'css/main.css' %}Django 会自动给我一个正确的 url。但是,{% static %}在角度代码中不可用。因此,您必须对 url 进行硬编码,如下所示:$routeProvider .when('/search', { templateUrl: 'static/ng-templates/search.html', controller: 'SearchController', })
但是,你猜怎么着? Django 在生产环境中不提供静态目录中的文件,至少在Heroku 中是这样。配置它来做到这一点真是让人头疼。
所以,我回到原来的代码:将所有ng-templates 保存在一个base.html 中。
我的问题是:
有什么更好的方法来做到这一点?
【问题讨论】:
-
这里根本没有争议:从 Django 的角度来看,Angular 模板是静态文件,应该存储在静态目录中。 Heroku 有关于如何使静态文件工作的绝对清晰和完整的说明;这实际上是安装库并修改 wsgi 文件中的一行的问题。在任何情况下,如果你不能让它工作,你将无法提供你的 Angular 代码。
-
@DanielRoseman,感谢您的回答。两个问题:1)如果我想使用像
{% if user.is_authenticated() %}这样的django东西怎么办? 2)这个问题有什么问题?为什么要降级?无论如何,谢谢
标签: javascript python angularjs django heroku