我正在研究Symfony2中的一個項目,並且我有幾個小部分的html需要包含在我的一個主視圖中。根據官方的Twig文檔,我應該可以簡單地使用{% include 'filename.html' %}
,但是在Symfony中,除非文件名以「.html.twig」結尾,否則會引發錯誤並指出找不到該文件。我想避免使用Twig模板來處理這些文件,因爲它們沒有動態內容和大量雙括號(它們是javascript模板),並且需要模板設計器必須將這些文件中的每一個都包裝在{% raw %}
中真正Kludgey的方式來做到這一點。如何在Symfony2/Twig模板中包含原始HTML文件?
回答
樹枝上的文件擴展名的快速回顧(從資料爲準):
每個模板的名稱也有指定爲模板的格式和發動機兩個擴展。
AcmeBlogBundle:Blog:index.html.twig - HTML format, Twig engine
AcmeBlogBundle:Blog:index.html.php - HTML format, PHP engine
AcmeBlogBundle:Blog:index.css.twig - CSS format, Twig engine
默認情況下,任何Symfony2的模板可以寫在任何嫩枝或PHP,以及擴展的最後一部分(例如.twig或.PHP)指定這兩個發動機應使用。擴展的第一部分(例如.html,.css等)是模板將生成的最終格式。
因此,對我來說,包含文件爲.html的文件即使沒有拋出錯誤也至少是含糊不清的。
所以,你有3種選擇:
如果文件是純粹的JavaScript然後將它們包括在您的網頁腳本標記。
如果它們混合使用HTML和JS,則使用{%raw%}轉義JS並將文件包含爲foo.html.twig模板。如果包含大量腳本,那麼很可能您的設計人員可以稍做重構,並將其大部分腳本移動到外部文件中(請參閱選項1)
如果您確實堅持始終可以寫一個Twig擴展以包含原始HTML文件。 (編輯:請參閱下面的@ Haprog的答案以獲取關於此選項的更多詳細信息)。
{{include_html( '富/一個bar.html')}}
UPDATE此後加入2015樹枝源函數:
{{ source('AcmeSomeBundle:Default:somefile.html.twig') }}
榮譽給@奈傑爾天使在選項4下面的評論。
我想要做的是讓鬍鬚模板被包含在頁面中供javascript使用。將它們直接放在包含'{%raw%}'標籤的模板中可行,但我覺得它非常混亂,並且在有很多小模板位時會變得笨重。由於存在更多的請求,通過ajax加載模板位會不必要地降低客戶端的速度。將模板放在沒有實際枝條標記的枝條文件中({%raw%}除外)會讓我的OCD開發人員感到厭倦,但在這種情況下,它似乎是最簡單的選項。謝謝。 – wdh
twig自此添加'source'函數'{{source('AcmeSomeBundle:Default:somefile.html.twig')}}' –
是否可以使用** phtml **文件? –
我也遇到了同樣的問題試圖找到在Twig模板中生成包含文件(鬍鬚模板)的解決方案,因此Twig不會嘗試解析它們。
起初,我把我的小鬍子模板文件簡單地命名爲sometemplate.html,並將其包裝在{% raw %}
標籤中。這工作了一段時間,但後來我開始使用帶有Handlebars插件的PhpStorm IDE(用於鬍鬚語法)。對於PhpStorm將文件識別爲鬍鬚語法,它們需要具有唯一的文件擴展名(默認情況下爲.mustache
),所以我將sometemplate.html重命名爲sometemplate.mustache,但我真的不喜歡我的鬍鬚模板需要用枝條標籤。所以我最終做了@rdjs在他的選項3中所說的。這是最好的解決方案。
這裏的工作枝條擴展功能我做:把它們解析
function twig_include_raw(Twig_Environment $env, $template) {
return $env->getLoader()->getSource($template);
}
$twig->addFunction('include_raw', new Twig_Function_Function('twig_include_raw', array('needs_environment' => true)));
有了這個地方,你可以很容易地包含文件爲「原始」沒有枝杈做:
{{ include_raw('sometemplate.mustache')|raw }}
我還送用於簡化在HTML頭部分包括小鬍子模板的樹枝宏:
{% macro mustache_script(id, file) -%}
<script id="{{ id }}" type="text/x-mustache-template">
{{ include_raw(file)|raw }}
</script>
{%- endmacro %}
在將包含上述宏的文件導入到Twig模板(例如,{% import "macros.twig" %}
)後,只需在HTML <head>
部分內執行{{ mustache_script('sometemplate_tpl', 'sometemplate.mustache') }}
即可輕鬆將小鬍子模板文件導入到Twig模板中。
我希望這可以幫助那些正在尋找相同問題解決方案的人。
這看起來會解決我在看的問題,但我不知道應該在哪裏定義twig_include_raw函數,以及什麼時候應該調用$ twig-> addFunction。你能再解釋一下嗎? – Craig
@克雷格對不起,我還沒有回覆。您可以在任何你喜歡的地方定義該功能。只要確保在使用'$ twig = new Twig_Environment($ loader)設置Twig後任何地方調用'$ twig-> addFunction()';'我通常有自己的'twigInit()'函數來處理設置Twig包括加載我使用的擴展。您可能還想閱讀關於在http://twig.sensiolabs.org/doc/advanced.html – Haprog
上延伸Twig的文檔頁面。這非常棒。如果您在「needs_environment」之後的選項中添加「'is_safe'=> array('all')」,您可以繞過「| raw」的需求。 –
對Kari進行跟進,如果您在擴展中......可以使用這種方式。
public function getFunctions() {
return [
'include_raw' => new \Twig_Function_Method($this, 'twig_include_raw', array('needs_environment'=> true, 'is_safe'=> array('all')))
];
}
這就是$ this-> twig_include_raw類型的方法。您可以在您的模板中包含:
{{ include_raw("my/file/here.html.twig") }}
不需要「| raw」。
我來到這篇文章,因爲我有一個類似的問題。經過一個小時左右的搜索和嘗試,我發現,從Twig Version 1.15 the "source Function" was added。
也許這對未來有幫助。
- 1. 在Jinja2模板中包含html文件
- 2. 如何將html或模板文件包含到.html文件中?
- 3. 如何在類中包含HTML模板?
- 4. 如何在模板中包含靜態html文件?
- 5. 在你的二進制文件中包含模板/ html文件
- 6. 如何在html中包含html文件
- 7. 在Wordpress模板中包含PHP文件
- 8. 如何在Pug文件中插入原始HTML(不包括外部HTML文件)
- 9. androidannotations2.7.1 - AndroidManifest.xml文件包含原始組件
- 10. 原始Mako模板包含在另一個在主塔
- 11. Sprockets結合JavaScript文件時,如何包含原始文件名?
- 12. 結合pdf文件與ghostscript,如何包含原始文件名?
- 13. 如何在rails中包含html文件?
- 14. 如何在HTML中包含JavaScript文件?
- 15. 如何在div中包含html文件?
- 16. 如何將jquery模板文件作爲外部模板文件在每個文件中包含多個模板?
- 17. 在html文件中包含html文件
- 18. 如何在Django中的所有模板中包含文件
- 19. Backbone.js與生態模板:如何在模板中包含模板?
- 20. r markdown生成的html文件是否包含原始數據?
- 21. 如何在Ruby文件中包含模板部分
- 22. 如何在模板文件中包含元數據?
- 23. 如何在pugjs模板中包含css文件
- 24. 如何在WordPress的php模板中包含PHP文件?
- 25. 如何在一個wordpress模板中包含一個css文件
- 26. Node.js - 如何將文件包含在vash模板中?
- 27. 如何在Django的靜態文件中包含模板標籤?
- 28. 如何將CSS文件包含在免費標記模板中
- 29. 如何在Joomla模板中包含PHP函數的文件
- 30. 如何在Django模板中管理Javascript文件的包含
如果官方文檔說它應該工作,那麼也許你應該嘗試更新樹枝和樹枝捆綁到一個更新的版本(編輯你的樹皮文件)。 – greg0ire
我試過,但我認爲這個問題與Symfony如何處理模板位置/類型而不是Twig問題有關。 – wdh
然後,你應該可能提交一個錯誤報告。 – greg0ire