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 或派生的相对路径
有没有人能够通过弄清楚如何设置目录来指出我正确的方向?我觉得我很接近,但现在让我发疯。
鉴于您的以下片段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引擎针对静态文件的优化服务器从中获取它们)。