[英]What is the best place to store ng-templates in Angular/Django SPA
我正在使用Django和AngularJS来构建SPA。
我有很多像这样的ng-templates:
<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 %}
在角度代码中不可用。 因此,您必须对网址进行硬编码,如下所示:
$routeProvider .when('/search', { templateUrl: 'static/ng-templates/search.html', controller: 'SearchController', })
但猜猜怎么了? Django不提供生产中静态目录中的文件,至少在Heroku
。 并且配置它这样做一直是如此痛苦的屁股。
所以,我回到原始代码: 将所有ng-templates
保存在一个base.html
。
我的问题是:
有什么更好的方法呢?
最好将ng-templates与静态文件放在一起。 如果你需要在ng-templates中使用django标签,我认为出了问题,因为你试图混合逻辑。
所以,在这里我们向您提出静态目录的问题:
1)解决方法是在服务器端编译模板(在某些视图中)并使用ajax编译html。 但是,再次说,这不是一个好方法,最好考虑分解。
2)如果你需要动态加载静态文件,你需要在javascript中的某个地方保留静态URL。 例如,您可以在django模板中使用tag并使全局变量(全局变量是不好的做法,但有时它们可以提供帮助),例如window.static_url= "/static/"
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.