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