繁体   English   中英

在Angular / Django SPA中存储ng-templates的最佳位置是什么?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM