簡體   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