【发布时间】:2015-08-05 17:13:00
【问题描述】:
我正在使用 Django 构建一个网站,托管在 PythonAnywhere 上。 其中一个网站页面是一个私人页面,我用它来构建内容,然后将显示在公共页面中。 我不想将私有页面中生成的内容保存到数据库中,然后从数据库中检索它,而是将其保存到静态文件中,在我的静态目录中(这是少量的 JSON 文件,将一遍又一遍地提供再次,所以我认为将它们作为静态文件提供是有意义的)。
在定义我的私人页面的视图中,我有以下用于保存文件的代码:
json=request.POST.get('json')
name=request.POST.get('name')
file=open(settings.STATIC_ROOT+'/'+name+'.json','w')
file.write(json)
file.close()
请注意,我之前导入了设置:
from django.conf import settings
奇怪的是,这工作了一段时间,但后来就停止工作了。 我得到的错误是:
Exception Value: 'function' object has no attribute 'STATIC_ROOT'
我做错了吗? 我在 PythonAnywhere 上的事实是否相关?该应用程序是否可能由无法写入我的静态目录的工作人员提供服务? 我能做些什么来解决这个问题?
【问题讨论】:
-
首选在您的
open语句中使用os.path.join。另外,检查文件夹中的权限。这在你的开发机器上工作吗? -
我没有使用开发机器,我只是在线工作。不使用 os.path.join 会有什么问题?静态文件夹应该有什么权限?
-
您应该出于各种原因使用开发机器。
os.path.join不会解决您的问题,但这是一个很好的做法:stackoverflow.com/questions/13944387/… 关于权限,通常它应该是只读的,但对于您的特殊情况,显然您需要写权限。 -
PythonAnywhere 开发人员在这里——当然所有听起来都应该工作。您的应用由作为您自己的用户 ID 运行的工作人员提供服务,因此它应该有权写入目录。
-
刚刚注意到 --
Exception Value: 'function' object has no attribute 'STATIC_ROOT'表明您对open的调用中的变量settings已被函数替换。您是否有任何代码在导入和打开之间定义了一个名为settings的函数?
标签: django pythonanywhere