Джанго не распознает путь MEDIA_URL? - PullRequest
8 голосов
/ 11 января 2010

Итак, я пытаюсь настроить TinyMCE и запустить его с помощью простой функции просмотра, но путь к файлу tiny_mce.js облажается. Файл находится по адресу /Users/home/Django/tinyMCE/media/js/tiny_mce/tiny_mce.js. Я считаю, что /media/js/tiny_mce/tiny_mce.js является правильным, так как сервер разработки не имеет доступа к файлам выше корня папки проекта Django. На отрендеренной странице в отладчике написано, что файл javascript не найден. Это потому, что он пытался просмотреть /js/tiny_mce/tiny_mce.js без обращения к / media / части пути.

В любом случае, вот фрагмент сценария для javascript в шаблоне с именем 'simple.html'. <script type="text/javascript" src="{{ MEDIA_URL }}/js/tiny_mce/tiny_mce.js"></script> <script type="text/javascript"> tinyMCE.init({ mode : "textareas", theme : "simple" }); </script>

И вот на что похожи жизненно важные части моих настроек.

MEDIA_ROOT = os.path.join(_base, 'media')
MEDIA_URL = 'http://127.0.0.1:8000/media/'
ADMIN_MEDIA_PREFIX = '/media/'

INSTALLED_APPS = (
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.sites',
    'tinymce',
)

Ответы [ 8 ]

22 голосов
/ 11 января 2010

Похоже, вы используете сервер отладки (ваш URL-адрес http://127.0.0.1:8000/...). Вы установили статическую подачу в свой urls.py?

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

'show_indexes': истинные опции позволяют просматривать ваши медиафайлы. Перейдите к своему корню mediaas http://127.0.0.1:8000/media/ и увидите, что что-то есть

13 голосов
/ 11 января 2010

Вы можете либо передать его в шаблон вручную, как предлагали другие, либо убедиться, что вы используете RequestContext вместо простого Context. RequestContext автоматически заполнит контекст определенными переменными, включая MEDIA_URL и другие, связанные с медиа.

Пример из документации:

def some_view(request):
    # ...
    return render_to_response('my_template.html',
                              my_data_dictionary,
                              context_instance=RequestContext(request))
7 голосов
/ 11 января 2010

Похоже, ars ответил на ваш реальный вопрос ... Но вы столкнетесь с другой проблемой: MEDIA_URL должно быть отличным от ADMIN_MEDIA_PREFIX. Если это не так, ADMIN_MEDIA_PREFIX будет иметь приоритет. Я обычно исправляю это, меняя ADMIN_MEDIA_PREFIX на /admin-media/.

6 голосов
/ 11 января 2010

У вас в настройках есть медиа-контекстный процессор?

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

Вы также можете попробовать добавить следующее в свои настройки, чтобы увидеть, показывают ли сообщения отладки что-либо:

TEMPLATE_DEBUG = True
4 голосов
/ 30 апреля 2013

Пожалуйста, внимательно прочитайте официальный Django DOC, и вы найдете наиболее подходящий ответ.

Лучший и простой способ решить эту проблему, как показано ниже.

from django.conf import settings
from django.conf.urls.static import static

urlpatterns = patterns('',
    # ... the rest of your URLconf goes here ...
) + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

Соответствующий URL: https://docs.djangoproject.com/en/1.5/howto/static-files/#serving-files-uploaded-by-a-user

3 голосов
/ 04 мая 2011

Большое спасибо за вашу помощь всем. Я смог решить это как

settings.py ->

MEDIA_ROOT = '/home/patrick/Documents/code/projects/test/media/'
MEDIA_URL = 'http://localhost:8000/media/'

urls.py ->

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

index.html ->

img src="/media/images/logo.jpg"

Опять же, большое спасибо, я сходила с ума, пытаясь выяснить, как все это сделать. Это решение работало для меня на сервере разработки Django версии 1.2.5 под управлением Ubuntu 10.04.

0 голосов
/ 30 августа 2017

У меня тоже была такая же проблема, вот как я это сделал.

Если вы используете FileField в своем классе модели вместо MEDIA_URL, используйте член .url для доступа к URL вашего файла. Например: что-то вроде этого

href = "{{ some_object.file_name.url }}" 

здесь имя_файла - это FileField в классе модели.

0 голосов
/ 20 мая 2015

У меня была похожая проблема, У меня есть приложение на одну страницу, и, видимо, у меня была ошибка новичка, из-за которой django пропустил мой медиа-путь, у меня было это:

url(r'^', home, name="home"),

вместо этого:

url(r'^$', home, name="home"),

пропущенный $ заставил мой шаблон URL пропустить мой медиа-адрес

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...