在 Django 应用程序中找不到静态目录

Mic*_*rre 2 python django google-app-engine static

在 Django 和 Google App Engine 方面,我有点菜鸟,我在应用程序设置中设置项目路径时遇到问题。具体来说,我试图引用一个 CSS 文件以与模板一起使用。我的目录结构如下:

app/
    app/
        -'__init__'.py
        -settings.py
        -urls.py
        -views.py
        -wsgi.py
img/
static/
    css/
        -style.css
templates/
    -index.html
Run Code Online (Sandbox Code Playgroud)

我认为我的问题在于基于我过去几个小时所做工作的设置。我开始无法引用模板,但我想出了如何做到这一点,让我解释一下:

在 settings.py 中,我有以下有关模板的信息:

PROJECT_PATH = os.path.abspath(os.path.dirname(__name__))

TEMPLATE_DIRS = (
    PROJECT_PATH + '/templates',
)
Run Code Online (Sandbox Code Playgroud)

结果证明这很简单。我设置了一个 PROJECT_PATH 来保存项目的路径,并附加了模板目录。但是,我仍然无法为静态文件做同样的事情,这就是我迷失的地方。关于静态文件,我在设置中有以下内容:

PROJECT_PATH = os.path.abspath(os.path.dirname(__name__))

STATIC_ROOT = ''

STATIC_URL = '/static/'

STATICFILES_DIRS = (
    PROJECT_PATH + '/static',
)
Run Code Online (Sandbox Code Playgroud)

从理论上讲,只要我使用的目录名为“/static/”,这些默认值就可以正常工作,但它的工作方式与模板不同。我尝试了很多不同的方法来尝试让这些值指向正确的目录,但只有一次我真正成功了,我认为这是使用绝对路径的组合,即“用户/用户名/应用程序” /static/css/' 一旦我部署项目就没有意义,因为我没有在我的计算机上托管它。另外我可能已经将静态目录移动到 app 子文件夹中,这也应该是不必要的。与模板文件相比,静态文件有什么不同?为什么我可以使用 PROJECT_PATH 并附加“/static”来实现与模板相同的结果?

我的项目中的其他一些有用信息:

app/urls.py:

urlpatterns = patterns(
    '',
    url(r'^$', views.index, name='index'),
) + staticfiles_urlpatterns()
Run Code Online (Sandbox Code Playgroud)

和:

templates/index.html:

<html>

    <head>
        {% load staticfiles %}
        <link rel="stylesheet" type="text/css" href="{% static 'css/style.css' %}" />
    </head>

    <body>
        <!--Some stuff-->
    </body>

</html>
Run Code Online (Sandbox Code Playgroud)

和:

app.yaml:

application: siren-1157
version: 1
runtime: python27
api_version: 1
threadsafe: true

handlers:
- url: /.*
  script: main.app
- url: /static
 static_dir: static

libraries:
- name: django
  version: "latest"
Run Code Online (Sandbox Code Playgroud)

编辑:根据@AlexMartelli 的一些反馈,我以这种方式将 application_readable: true 添加到 app.yaml 中:

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

我在故障排除时使用的其他一些资源,但效果不佳:

Django -- 无法让静态 CSS 文件加载 https://docs.djangoproject.com/en/1.4/howto/static-files/#configuring-static-files https://github.com/divio/django-商店/blob/master/example/settings.py

我尝试过的其他一些事情:

更改 index.html 中的参考技术:

{% static 'css/style.css'}
Run Code Online (Sandbox Code Playgroud)

{{ STATIC_URL }}css/style.css
Run Code Online (Sandbox Code Playgroud)

使用各种不同的操作系统模块更改了 PROJECT_PATH

将 STATIC_ROOT、STATIC_URL 和 STATICFILES_DIRS 更改为各种不同的值,从绝对路径 ('/Users/username/app/static/') 到使用 PROJECT_PATH 或派生的相对路径

有没有人能够通过弄清楚如何设置目录来指出我正确的方向?我觉得我很接近,但现在让我发疯。

Ale*_*lli 5

鉴于您的以下片段app.yaml

handlers:
- url: /.*
  script: main.app
- url: /static
 static_dir: static
Run Code Online (Sandbox Code Playgroud)

使用 app.yaml#Static 文件处理程序配置中所述,访问您的应用程序的 Web 客户端将获得这些静态文件,但您自己的应用程序代码将无法访问它们。改变你handlers:

handlers:
- url: /.*
  script: main.app
- url: /static
  static_dir: static
  application_readable: true
Run Code Online (Sandbox Code Playgroud)

并且 Web 客户端和您的应用程序自己的代码都可以访问这些静态文件(本质上,这些静态文件的两个副本将被上传,一个位于您的源代码旁边,以便您的应用程序代码可以读取它们,另一个在 app引擎针对静态文件的优化服务器从中获取它们)。