如何在Django应用程序的视图中引用静态文件

时间:2015-03-25 23:05:19

标签: python django django-staticfiles

我知道在Django项目中访问静态文件有很多问题,但是我找不到一个令人满意的答案来处理我正在处理的问题。所以,这是我的项目结构:

.
├── project
│   ├── __init__.py
│   ├── settings.py
│   ├── urls.py
│   ├── wsgi.py
├── db.sqlite3
├── manage.py
└── app
    ├── admin.py
    ├── __init__.py
    ├── migrations
    │   ├── __init__.py
    ├── models.py
    ├── static
    │   └── app
    │       └── file.txt
    ├── tests.py
    ├── urls.py
    └── views.py

根据Django 1.7 documentation我已将静态文件 file.txt 存储在 app / static / app 文件夹中。现在,如何在视图中引用此文件?让我们说我需要为app / views.py中定义的每个调用读取此文件的内容。

像往常一样,我在项目/ settings.py

中默认设置 STATIC_URL =' / static /'

由于

2 个答案:

答案 0 :(得分:5)

您可以将static模板标记导入视图并按原样使用:

from django.templatetags.static import static

url = static('app/file.jpg')

答案 1 :(得分:1)

您可以通过在设置中定义STATIC_ROOT来执行此操作。然后在运行项目之前,您可以运行

python manage.py collectstatic

然后可以使用以下方法访问静态文件: -

file = open(os.path.join(settings.STATIC_ROOT, 'app/a.txt'))

这基本上就是这样,它应该在生产环境中完成,因为静态文件是与django html视图分开托管的。

在project / urls.py

中动态加载app的名称
url(r'^', include('app.urls', app_name="app")),

然后在视图中: -

from django.core.urlresolvers import resolve
def appname(request):
    return resolve(request.path).app_name