如何使用django nonrel的静态文件

syl*_*loc 10 django google-app-engine django-nonrel

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

- url: /static   
static_dir: static
Run Code Online (Sandbox Code Playgroud)

我无法访问我的静态文件.我是否需要进行其他配置?

Thx提前.

LXj*_*LXj 13

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

但是,这不是你唯一应该知道的事情.

通过将此指令放入app.yaml,您可以使AppEngine Web服务器(无论是开发服务器还是生产服务器)处理路径/static,并且您需要将所有静态文件放在静态目录中.这意味着python manage.py collectstatic每次更改静态文件中的任何内容时都必须运行(特别是如果你有/使用静态文件的应用程序 - 比如说,admin或者django-tinymce)只是为了在本地服务器上测试这些更改

那怎么避免呢?默认情况下,staticfiles提供帮助程序来在开发服务器上提供这些文件而不必每次都运行collectstatic,问题是上一段中描述的目标名称冲突:Django无法捕获对静态文件路径的请求,因为它们由appserver处理.您可以通过在开发和生产服务器上使用不同的路径来解决它:

# in settings.py
if DEBUG: 
    STATIC_URL = '/devstatic/'
else:
    STATIC_URL = '/static/'
Run Code Online (Sandbox Code Playgroud)

(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'),
)
Run Code Online (Sandbox Code Playgroud)

这意味着:你将静态fiels放入staticdir(并进入你的应用程序的staticdirs),collectstatic将它们收集到sitestaticdir中.适当的app.yaml指令是

- url: /static
  static_dir: sitestatic
Run Code Online (Sandbox Code Playgroud)

最后,您可以配置在上传应用程序时app.yaml忽略staticmedia目录,因为所有静态文件都将被收集并提供给用户sitestatic.但是,您应该仅在上载时设置此项(否则这些文件将无法在调试服务器中使用)


Igo*_*rin 11

app.yaml与Django无关,但它确实配置了App Engine前端.答案取决于您是想要使用Django还是前端(更好,更便宜,更快)来提供静态文件.

如果你只是"补充说:"你- url: /static映射到年底,移动它之前/.*通配符.由于所有映射都是从上到下处理的 - 第一个匹配映射获胜.