为啥在 settings.ALLOWED_INCLUDE_ROOTS 中使用变量不会让我使用 % ssi %?
Posted
技术标签:
【中文标题】为啥在 settings.ALLOWED_INCLUDE_ROOTS 中使用变量不会让我使用 % ssi %?【英文标题】:Why does using a variable in settings.ALLOWED_INCLUDE_ROOTS won't let me use % ssi %?为什么在 settings.ALLOWED_INCLUDE_ROOTS 中使用变量不会让我使用 % ssi %? 【发布时间】:2013-04-27 16:14:13 【问题描述】:问题
我正在使用 Django 1.3。我将不得不在我的模板中使用许多不同的 javascript 函数(比如 10 个或其他)。
我首先做的是把它们放在<script>
标签中,效果很好。但是现在它可以工作了,我想将它们与模板代码分开。这将使代码更具可读性。
所以我想到了使用% ssi "..." parsed %
的东西。由于我在我的 JavaScript 代码中使用了 Django 模板标签,我不能只用 <script src="..."></script>
将它们从我的静态文件中链接起来。
这是有效的:
# This will allow the % ssi % tag to include files from the given paths
ALLOWED_INCLUDE_ROOTS = (
'/THIS/IS/THE/FULL/PATH/TO/MY/PROJECT/static/js/',
)
这是不起作用的:
# Project root for further paths
PROJECT_PATH = os.path.dirname(__file__)
# This will allow the % ssi % tag to include files from the given paths
ALLOWED_INCLUDE_ROOTS = (
PROJECT_PATH+'/static/js/',
)
我仔细检查了这两个字符串是否相同(带有./manage shell
)并且它们完全相同(带有尾随/
和所有字符串)。
问题
为什么第二个代码在我的模板中显示[Didn't have permission to include file]
?
另外,我应该如何链接文件以包含在% ssi %
标签中?由于% get_static_prefix %
不起作用,我目前正在使用文件的完整路径,这很难看。
【问题讨论】:
根据你上面所说的,我不相信你。我认为除了您发布的代码之外还有一些问题,正如您所说,字符串是相同的。你能做一个最小的 Django 项目,但仍然会出现这个问题吗? Short, Self Contained Correct Example,可以这么说。 重做了,不幸的是我遇到了同样的问题。我将路径(带有PROJECT_PATH
和w/o)放在ALLOWED_INCLUDE_ROOTS
中,然后打印出来。两个字符串是相同的,但我不明白任何背景代码如何破坏它。 Django是否有可能在这样一个敏感的工具中禁用变量的使用?
找到了一个可以帮助我做我想做的事情的模块 (django-compressor)。如果没有% ssi %
标签,它允许在压缩文件中使用模板标签。如果它有效,我会回到这里并回答我自己的问题,无论如何感谢您的帮助。
【参考方案1】:
虽然看起来很奇怪,但我没有对我的 settings.py
进行任何更改,但它现在可以正常工作了。我相信 Mike Cooper 是对的,一些远程代码破坏了 ALLOWED_INCLUDE_ROOTS
路径。
【讨论】:
【参考方案2】:ALLOWED_INCLUDE_ROOTS
可能是一个常量,因为它的命名约定。常量并不意味着可变。
http://en.wikipedia.org/wiki/Constant_(programming)#Naming_conventions
【讨论】:
这不是常量和变量的问题; Python 中没有常量之类的东西,只有不打算改变的变量。 使用整个项目通用的前缀创建路径 constant 并不意味着它每天都会改变,但项目结构每天都会改变(生产可能是一个例子)。以上是关于为啥在 settings.ALLOWED_INCLUDE_ROOTS 中使用变量不会让我使用 % ssi %?的主要内容,如果未能解决你的问题,请参考以下文章
为啥 CoreGui Roblox 锁定在 DataModel 中,为啥受信任的用户不能使用 CoreScripts?
为啥 + 仅在客户端是 NaN?为啥不在 Node.js 中?
为啥我们不能在 TypeScript 类中定义一个 const 字段,为啥静态只读不起作用?