Django не может найти статические изображения в шаблонах

Я просмотрел почти все примеры здесь и в документации, и они просто не работают.

Итак, в моем файле settings.py у меня есть

STATIC_ROOT = '/mattr/static/'
STATIC_URL = '/mattr/public/'

STATICFILES_FINDERS = (
'django.contrib.staticfiles.finders.FileSystemFinder',
'django.contrib.staticfiles.finders.AppDirectoriesFinder',)

TEMPLATE_CONTEXT_PROCESSORS = ('django.core.context_processors.static',)

TEMPLATE_DIRS = ('mattr/public', )

В основном все, что нужно для обработки статических файлов.

В urls.py у меня есть обычные шаблоны для страниц (шаблоны загружаются просто отлично) и есть эта дополнительная строка

urlpatterns += staticfiles_urlpatterns()

В views.py у меня есть (это для домашней страницы):

def home(request):
    t = get_template('index.html');
    html = t.render(RequestContext(request))
    return HttpResponse(html)

А в файле шаблона index.html у меня есть строчка

<img src="{{ STATIC_URL }}media/images/Mattr1.png">

И все же он никогда не показывает изображения. Даже когда я пытаюсь просто перейти к файлу изображения непосредственно по адресу http://127.0.0.1:8000/mattr/public/media/images/Mattr1.png, возникает ошибка «Страница не найдена». Я был немного сбит с толку, откуда начинается путь, но поскольку страница моего шаблона загружается, я решил, что у меня правильные пути.


person Jared Joke    schedule 15.11.2012    source источник
comment
какой URL вы ожидаете, если это http://127.0.0.1:8000/mattr/public/media/images/Mattr1.png неверно? Это поможет изменить настройки   -  person Aamir Adnan    schedule 16.11.2012
comment
@AamirAdnan В основном из корня моего сайта (расположение manage.py) у меня есть файл в /mattr/public/images/Mattr1.png, поэтому я ожидал, что он покажет, что   -  person Jared Joke    schedule 16.11.2012
comment
значит должно быть так <img src="{{ STATIC_URL }}images/Mattr1.png">   -  person Aamir Adnan    schedule 16.11.2012
comment
@AamirAdnan Извините, там также должен был быть носитель (в пути к файлу)   -  person Jared Joke    schedule 16.11.2012


Ответы (3)


когда вы говорите о статических файлах, сделайте следующее:

STATIC_URL = '/static/' #or whatever you want

STATICFILES_DIRS = (
    '/path/to/static/root/directory/',
)

Не забывайте, что у администратора coma или django не будет своего css. Готово, ничего менять в urls.py не нужно

если вы говорите о СМИ, сделайте это:

MEDIA_ROOT = '/media/' # or whatever you want

MEDIA_URL = '/path/to/media/root/directory'

и поместите это внизу в myproject.urls :

import settings
urlpatterns += patterns('', url(r'^media/(?P<path>.*)$', 'django.views.static.serve', {'document_root': settings.MEDIA_ROOT,}),)

Готово!

person Otskimanot Sqilal    schedule 16.11.2012
comment
нет необходимости что-либо менять в urls.py Я добавил статические перенаправления в свой url.py, что мешало его работе. - person ECH; 01.11.2017

Использование «/» перед путем означает, что вы ссылаетесь на корневой каталог, что, я думаю, не так. Попробуйте сделать это.

STATIC_ROOT = 'mattr/static/'
person Raunak Agarwal    schedule 15.11.2012

Попробуйте это в настройках .py:

import os
DIRNAME = os.path.dirname(__file__)

STATIC_ROOT = os.path.join(DIRNAME, 'static')

STATIC_URL = '/static/'

в ваших шаблонах:

{{STATIC_URL}}css/etc...

Вы также перезаписываете свой TEMPLATE_CONTEXT_PROCESSORS, вместо этого сделайте это: в своих настройках.py

import django.conf.global_settings as DEFAULT_SETTINGS

TEMPLATE_CONTEXT_PROCESSORS = DEFAULT_SETTINGS.TEMPLATE_CONTEXT_PROCESSORS + (
"whatever_your_adding",
)
person Jesramz    schedule 15.11.2012
comment
Итак, эта строка STATIC_ROOT, куда мне тогда поместить мои файлы? Похоже, что где-то к пути добавляется дополнительный «статический». Кроме того, строка шаблона вызвала синтаксическую ошибку из-за + - person Jared Joke; 16.11.2012