0

我已经成功地在 Appengine 上启动并运行了一个基本的 Django-nonrel 应用程序。模板正在正确呈现,但静态内容返回 404 响应。

使用“python manage.py runserver”启动的开发服务器中的静态内容没有问题。

这些是中的相关行static.py

STATIC_URL = '/static/'
STATICFILES_FINDERS = (
    'django.contrib.staticfiles.finders.FileSystemFinder',  # Refers to PROJECT_DIR/static
    'django.contrib.staticfiles.finders.AppDirectoriesFinder',  # Appname/static
)

STATICFILES_DIRS = (os.path.join(PROJECT_DIR, 'static'),)

在相关模板中:

{% extends "base.html" %}
{% load staticfiles %}
{% block title %}Adding Objects{% endblock %}

{% block content %}
<p>Placeholder for Objects</p>
    <img src="{% static "test_pattern.gif" %}">
    <img src="{% static "sample_overlay.gif" %}">
{% endblock %}

myproject/static这样,目录和目录中的静态文件myproject/myapp/static就可以在开发服务器 ( python manage.py runserver) 中成功提供。

这是我的app.yaml

application: appname
version: 1
runtime: python27
api_version: 1
threadsafe: yes

builtins:
- remote_api: on

inbound_services:
- warmup

libraries:
- name: django
  version: latest

handlers:
- url: /_ah/queue/deferred
  script: djangoappengine.deferred.handler.application
  login: admin

- url: /_ah/stats/.*
  script: djangoappengine.appstats.application

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

- url: /.*
  script: djangoappengine.main.application

任何线索如何解决这个问题?我不希望 Appengine Web 服务器处理静态文件,我想通过 Django 路由所有内容(至少现在是这样)。因此,在我的情况下,这样的解决方案实际上是不可接受的。

编辑:我可以很容易地解决这个问题,app.yaml并从projectdir/static.

- url: /static
  static_dir: static

但是这个解决方案似乎很脏,我想把它全部留给 Django。

4

1 回答 1

0

您在 app.yaml 中添加 /static 映射是正确的方法。它不是“脏”的。

此外,您正在 app.yaml 中添加 django 库。这是不正确的。Django-nonrel 使用它自己的 Django 分支,您应该将其作为目录与您的应用程序一起导入。将 django 调用添加到 app.yaml 中的库意味着您正在导入 2 个版本的 Django,这可能会导致奇怪的错误。删除 app.yaml 中的 Django 库调用,并导入 nonrel 中包含的 Django 版本。

于 2014-06-03T19:46:20.247 回答