我已成功获得一个基本的Django-nonrel应用并在Appengine上运行。模板正在正确呈现,但静态内容返回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路由一切(至少目前为止)。因此,像this这样的解决方案在我的案例中并不可接受。
编辑:我可以在我的app.yaml
中轻松解决此问题并提供来自projectdir/static
的所有静态文件。
- url: /static
static_dir: static
但是这个解决方案看起来很脏,我想把它全部留给Django。
答案 0 :(得分:0)
在app.yaml中添加/ static映射是正确的方法。它不是&#34;脏&#34;。
另外,您在app.yaml中添加了django库。这是不正确的。 Django-nonrel使用自己的Django分支,您应该将其作为目录导入到您的应用程序中。在app.yaml中将django调用添加到库意味着您要导入两个版本的Django,这可能会导致奇怪的错误。删除app.yaml中的Django库调用,并导入nonrel附带的Django版本。