django - 如何在 Django nonrel 中使用静态文件

标签 django google-app-engine django-nonrel

我正在尝试将 Django nonrel 项目用于谷歌应用引擎。我按照描述设置测试项目 here .我为我的静态文件在名为“static”的项目中添加了一个新文件夹。对于 app.yaml 文件,我添加了这些行;

- url: /static   
static_dir: static

我无法访问我的静态文件。我需要做额外的配置吗?

提前致谢。

最佳答案

正如人们已经指出的那样,您应该将 static_dir 指令放在 /.* 模式之前

然而,这不是您应该知道的唯一事情。

通过将此指令放入 app.yaml,您可以让 AppEngine 网络服务器(无论是开发服务器还是生产服务器)处理路径 /static,并且您需要将所有静态文件放在 static 目录中。这意味着每次更改静态文件中的任何内容时,您都必须运行 python manage.py collectstatic(特别是如果您拥有/使用带有静态文件的应用程序——例如,admindjango-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 在上传您的应用程序时忽略 staticmedia 目录,因为所有静态文件都将被收集到 sitestatic 并从中提供服务。但是,您应该只在上传时设置它(否则这些文件将无法在调试服务器中使用)

关于django - 如何在 Django nonrel 中使用静态文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7779683/

相关文章:

django - 适用于 Appengine 或非 SQL 中 Django 模型国际化的任何应用程序?

django-admin - 在 django-nonrel 上使用 django-admin,使用 App Engine 模型

python - docker-compose 与 postgres 的 Django 连接

python - 如果用户有删除权限,如何检查 Django 模板?

python - 如何访问自定义管理器中的模型属性?

google-app-engine - 在 AppEngline 上运行时,将 Cloud Firestore 与 AppEngine Go 标准环境结合使用会返回 rpc 错误

python - 尝试编辑/创建时,特定模型的 Django 管理员挂起(直到超时错误)

Python 应用程序错误(Udacity)

python - 如何清空 Google App Engine 的本地数据库

python - App Engine/Python/Django 非 JSON 上的身份验证