2015-03-25 1 views
2

Я знаю, что здесь было много вопросов о доступе к статическим файлам в проекте Django, но я не мог найти удовлетворительного ответа на проблему, с которой я имею дело. Итак, вот моя структура проекта:Как ссылаться на статический файл в представлении приложения 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/views.py.

Как обычно, у меня есть настройки STATIC_URL по умолчанию = «/ статический /» в проекте/settings.py

Благодаря

ответ

3

Вы можете импортировать static тег шаблона в вашей точки зрения и использовать его в качестве такие как:

from django.templatetags.static import static 

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

Мне нужно получить доступ к статическому файлу в представлении, а не в шаблонный тег. Выше не может работать в представлении. – abhinavkulkarni

+0

Есть ли способ не жестко кодировать имя приложения? – abhinavkulkarni

+0

Вам нужно будет жестко указать имя приложения, так как он определяет каталог, в котором он хранится. –

1

Вы можете сделать это, указав STATIC_ROOT в своих настройках. Затем перед запуском проекта вы можете запустить

python manage.py collectstatic 

И статические файлы могут быть доступны с помощью: -

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

Это в основном способ, предполагается сделать в производственной среде, поскольку статические файлы размещаются отдельно от представлений django html.

Чтобы загрузить имя приложения динамически в проекте/urls.py

url(r'^', include('app.urls', app_name="app")), 

, а затем в разных видах: -

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