对于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
我认为我的问题在于基于过去几个小时我一直在做的工作的设置。我开始无法引用模板,但我想出了如何做到这一点,让我解释一下:
在settings.py中,我有以下有关模板的信息:
PROJECT_PATH = os.path.abspath(os.path.dirname(__name__))
TEMPLATE_DIRS = (
PROJECT_PATH + '/templates',
)
事实证明这很简单。我设置了一个PROJECT_PATH,它保存了项目的路径,并附加了templates目录。但是,我仍然无法为静态文件做同样的事情,这就是我迷失的地方。关于静态文件,我在设置中有以下内容:
PROJECT_PATH = os.path.abspath(os.path.dirname(__name__))
STATIC_ROOT = ''
STATIC_URL = '/static/'
STATICFILES_DIRS = (
PROJECT_PATH + '/static',
)
理论上,只要我使用的目录名为'/ static /',这些默认值就可以正常工作,但它与模板的工作方式不同。我已经尝试了很多不同的东西来尝试将这些值指向正确的目录,但只有一次我实际上已经成功,我认为这是使用绝对路径的组合,即'Users / username / app / static / css /'在部署项目后没有意义,因为我没有在我的计算机上托管它。此外,我可能已经移动了app子文件夹中的静态目录,这也是不必要的。与模板文件相比,静态文件有何不同?为什么我可以使用PROJECT_PATH并附加'/ static'来获得与模板相同的结果?
我项目中的其他一些有用信息:
app/urls.py:
urlpatterns = patterns(
'',
url(r'^$', views.index, name='index'),
) + staticfiles_urlpatterns()
和
templates/index.html:
<html>
<head>
{% load staticfiles %}
<link rel="stylesheet" type="text/css" href="{% static 'css/style.css' %}" />
</head>
<body>
<!--Some stuff-->
</body>
</html>
和
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"
编辑:根据@AlexMartelli的一些反馈,我已经将app_yaml中的application_readable:true添加到了这里:
- url: /static
static_dir: static
application_readable: true
我在排除故障时使用的其他一些资源,效果不佳:
Django -- Can't get static CSS files to load https://docs.djangoproject.com/en/1.4/howto/static-files/#configuring-static-files https://github.com/divio/django-shop/blob/master/example/settings.py
我尝试过的其他一些事情:
更改index.html中的参考技术:
这
{% static 'css/style.css'}
到
{{ STATIC_URL }}css/style.css
使用各种不同的os模块更改了PROJECT_PATH
将STATIC_ROOT,STATIC_URL和STATICFILES_DIRS更改为各种不同的值,从绝对路径('/ Users / username / app / static /')到使用PROJECT_PATH或派生的相对路径
是否有人能够指出我如何设置目录?我觉得我很接近,但它现在让我疯了。
答案 0 :(得分:4)
给出app.yaml
的以下代码段:
handlers:
- url: /.*
script: main.app
- url: /static
static_dir: static
如Configuring with app.yaml#Static file handlers所述,访问您应用的网络客户端将获取这些静态文件,但您自己的应用程序代码将不能够访问它们。将您的handlers:
更改为
handlers:
- url: /.*
script: main.app
- url: /static
static_dir: static
application_readable: true
并且网络客户端和您应用程序自己的代码都可以访问这些静态文件(实质上,这些静态文件的两个副本将被上传,一个存放在您的源代码旁边,以便您的应用程序的代码可以读取它们,其他应用引擎优化的静态文件服务器来自其他地方。
答案 1 :(得分:1)
在对其他StackOverflow帖子进行进一步搜索之后,我找到了一个有以下建议的帖子:
检查您是否可以直接导航到所需的css文件。例如,如果您在localhost上运行,请尝试导航到localhost:8080 / static / css / style.css 你能查看文件吗?
执行此操作后,我 实际上能够查看该文件。然后,巧合的是,通过尝试再次访问索引,我能够看到CSS并获得以下日志奖励:
INFO 2016-01-09 04:11:00,856 module.py:794] default: "GET /static/css/style.css HTTP/1.1" 200 2796
可能发生的是,通过手动访问css文件,浏览器被迫重新加载并利用它来显示索引页。
对于一个可能很糟糕的问题,这是一个可怕的答案,但希望将来有人发现它有用。