为啥在 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 字段,为啥静态只读不起作用?

为啥这个函数序言中没有“sub rsp”指令,为啥函数参数存储在负 rbp 偏移处?

为啥这个函数序言中没有“sub rsp”指令,为啥函数参数存储在负 rbp 偏移量?