我正在尝试将 Django nonrel 项目用于谷歌应用引擎。我按照描述设置测试项目 here .我为我的静态文件在名为“static”的项目中添加了一个新文件夹。对于 app.yaml 文件,我添加了这些行;
- url: /static
static_dir: static
我无法访问我的静态文件。我需要做额外的配置吗?
提前致谢。
最佳答案
正如人们已经指出的那样,您应该将 static_dir
指令放在 /.*
模式之前
然而,这不是您应该知道的唯一事情。
通过将此指令放入 app.yaml,您可以让 AppEngine 网络服务器(无论是开发服务器还是生产服务器)处理路径 /static
,并且您需要将所有静态文件放在 static 目录中。这意味着每次更改静态文件中的任何内容时,您都必须运行 python manage.py collectstatic
(特别是如果您拥有/使用带有静态文件的应用程序——例如,admin
或 django-tinymce
) 只是为了在本地服务器上测试这些更改
那么如何避免呢?默认情况下,staticfiles 提供帮助程序在开发服务器上提供这些文件,而无需每次都运行 collectstatic,问题是上一段中描述的目录名称冲突:Django 无法捕获对静态文件路径的请求,因为它们由 appserver 处理。您可以通过在开发和生产服务器上使用不同的路径来解决它:
# in settings.py
if DEBUG:
STATIC_URL = '/devstatic/'
else:
STATIC_URL = '/static/'
(djangoappengine 在开发服务器上将 DEBUG 设置为 True)。您可以保留 ADMIN_MEDIA_PREFIX = '/static/admin/'
,但请记住在使用 admin 之前至少运行一次 collectstatic
当然记得在模板中使用{{ STATIC_URL }}path/to.css
而不是/static/path/to.css
哦,我假设您区分了您处理的原始静态文件的目录和应该收集静态文件的目录。我在我的 settings.py 中使用它:
STATIC_ROOT = os.path.join(os.path.dirname(__file__), 'sitestatic')
STATICFILES_DIRS = (
os.path.join(os.path.dirname(__file__), 'static'),
)
这意味着:您将静态字段放入 static
目录(并放入您的应用程序的 static
目录),collectstatic
将它们收集到 站点静态
目录。适当的 app.yaml
指令是
- url: /static
static_dir: sitestatic
最后,您可以配置 app.yaml
在上传您的应用程序时忽略 static
和 media
目录,因为所有静态文件都将被收集到 sitestatic
并从中提供服务。但是,您应该只在上传时设置它(否则这些文件将无法在调试服务器中使用)
关于django - 如何在 Django nonrel 中使用静态文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7779683/