1
darasion OP 自问自答:
读了下django 0.96 和 1.2 的源码,对比了一下 django.template.loaders.file_system 这个模块。 发现 Loader 类的 get_template_sources 方法中,文件路径的结合方式不同。 0.96 使用的是普通的 os.path.join 方法,1.2 使用的是 django.utils._os.safe_join 方法,后者限制不允许使用 base path 外的路径。而 include 和 extends 标签会先从base path开始寻找模板(这也许是bug?),如果路径里边有 “../” 可能会直接跳出这个 base path ,于是就会触发找不到模板的异常: 引用(django.utils._os.safe_join): def safe_join(base, *paths): """ Joins one or more path components to the base path component intelligently. Returns a normalized, absolute version of the final path. The final path must be located inside of the base path component (otherwise a ValueError is raised). """ #... 举例: >>> from django.utils._os import safe_join >>> safe_join('templates','../bbb.html') Traceback (most recent call last): File "<stdin>", line 1, in <module> File "C:\Python26\lib\site-packages\django\utils\_os.py", line 44, in safe_joi n raise ValueError('the joined path is located outside of the base path' ValueError: the joined path is located outside of the base path component >>> 看来,在 django 1.2 模板中,不能 include 或 extends 上层目录的模板。 |
2
lepture 2011-03-10 11:18:03 +08:00
不能。。
以上层作为 template dir 。 render 的时候到下一层咯。 render("xxx/xxx.html") |