public TemplateReturnInfo RenderFile2(StringBuilder sb, IDictionary options, string filename, string refererFilename) { if (filename[0] == '/' || string.IsNullOrEmpty(refererFilename)) { refererFilename = _viewDir; } //else refererFilename = Path.GetDirectoryName(refererFilename); string filename2 = Utils.TranslateUrl(filename, refererFilename); Console.WriteLine(filename2); ITemplateOutput tpl; if (_cache.TryGetValue(filename2, out tpl) == false) { string tplcode = File.Exists(filename2) == false?string.Concat("文件不存在 ", filename) : Utils.ReadTextFile(filename2); tpl = Parser(tplcode, _usings, options); lock (_cache_lock) { if (_cache.ContainsKey(filename2) == false) { _cache.Add(filename2, tpl); } } } try { return(tpl.OuTpUt(sb, options, filename2, this)); } catch (Exception ex) { TemplateReturnInfo ret = sb == null ? new TemplateReturnInfo { Sb = new StringBuilder(), Blocks = new Dictionary <string, int[]>() } : new TemplateReturnInfo { Sb = sb, Blocks = new Dictionary <string, int[]>() }; ret.Sb.Append(refererFilename); ret.Sb.Append(" -> "); ret.Sb.Append(filename); ret.Sb.Append("\r\n"); ret.Sb.Append(ex.Message); ret.Sb.Append("\r\n"); ret.Sb.Append(ex.StackTrace); return(ret); } }
public string RenderFile(string filename, IDictionary options) { TemplateReturnInfo ret = this.RenderFile2(null, options, filename, null); return(ret.Sb.ToString()); }