Django Admin媒体文件在Google App Engine上的位置

时间:2012-03-25 13:45:32

标签: django google-app-engine django-admin

我使用Python 2.7和Django 1.3运行GoogleAppEngine(GAE)1.6.3:

libraries:
- name: django
  version: "1.3"

在我的app.yaml中。以下内容应该在网址/static/admin上提供管理媒体文件:

- url: /static/admin
  static_dir: django/contrib/admin/media
  expiration: '0'

但我为这样的管理媒体(css等)获得了404s。我是否使用Django管理员媒体文件的正确位置?

5 个答案:

答案 0 :(得分:3)

执行此操作的最佳方法是将media目录复制或符号链接到本地​​文件的app目录中,以便随应用程序的文件一起上传。然后您的app.yaml可以引用app目录中的相对路径。

您可以在$PYTHON_LIB路径中使用app.yaml变量替换,但看起来Django不在Python 2.7运行时的实时版本中$PYTHON_LIB下。

答案 1 :(得分:1)

将此内容添加到app.yaml

handlers:
- url: /static/admin
  static_dir: static/admin
  expiration: '0'

我能够通过以下方式提供CSS文件:

将此添加到settings.py

BASE_DIR = os.path.abspath(os.path.dirname(__file__)) + os.sep
STATIC_ROOT = BASE_DIR + 'static'

然后运行

python manage.py collectstatic

管理媒体文件在本地以及appspot.com上正确显示。 last命令将媒体文件复制到static/目录中。所以事实上Dan Sanderson建议的是以更自动化的方式。

答案 2 :(得分:1)

我试过Philipp Keller的collectstatic,但我没有这个命令。

因此,将此处理程序添加到app.yaml

- url: /static/admin
  static_dir: django/contrib/admin/static/admin
  expiration: '0'

然后,在settings.py中,删除ADMIN_MEDIA_PREFIX(在django 1.4中删除)并添加:

STATIC_URL = '/static/'

你有工作css。

答案 3 :(得分:0)

是可能由部署变量$ PYTHON_LIB引用的静态文件??

文件app.yaml

application: hello
version: 1
runtime: python27
api_version: 1
threadsafe: true

libraries:
- name: django
  version: "1.3"

handlers:
- url: /admin/media
  static_dir: $PYTHON_LIB/lib/django_1_3/django/contrib/admin/media

builtins:
- django_wsgi: on

log local:

INFO 2012-04-03 02:06:19,200 dev_appserver.py:2884]“GET /admin/media/css/base.css HTTP / 1.1”200 -

INFO 2012-04-03 02:06:19,207 dev_appserver.py:2884]“GET /admin/media/css/dashboard.css HTTP / 1.1”200 -

INFO 2012-04-03 02:06:19,242 dev_appserver.py:2884]“GET /admin/media/img/admin/default-bg.gif HTTP / 1.1”200 -

日志错误部署应用

2012-04-02 19:17:32.775/admin/media/css/dashboard.css 404 6ms 0kb

    • [02 / Apr / 2012:19:17:32 -0700]“GET /admin/media/css/dashboard.css HTTP / 1.1”404

找不到处理程序引用的静态文件:$ PYTHON_LIB / lib / django_1_3 / django / contrib / admin / media / css / dashboard.css

答案 4 :(得分:0)

以下似乎对我有用。

<强>的app.yaml

 <script>
 <?php 
while($rowss = mysql_fetch_array($result2, MYSQL_ASSOC)){ 
  ?>  
    var str = <?php echo $rowss["ingredient"];?>;
    var str_array = str.split(',');
    for(var i = 0; i < str_array.length; i++) {
        // Trim the excess whitespace.
        str_array[i] = str_array[i].replace(/^\s*/, "").replace(/\s*$/, "");
        // Add additional code here, such as:
        var opt = document.createElement('option');
        opt.innerHTML = str_array[i];
        opt.value = str_array[i];
        sel.appendChild(opt);
    }
}
</script>

设置

handlers:
- url: /static
  static_dir: staticfiles

运行STATIC_URL = '/static/' STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles') STATICFILES_DIRS = ( os.path.join(BASE_DIR, 'static'), ) 。现在,在您的staticfiles管理文件夹下,应该创建。