Django Media не загружается - PullRequest
       36

Django Media не загружается

0 голосов
/ 29 марта 2012

Итак, используя django в первый раз, я столкнулся с этой проблемой, когда URL-адрес носителя не хочет загружаться / работать до сих пор. Мой urls.py настроен так:

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

my settings.py likeтак

PROJECT_ROOT = os.path.abspath(os.path.dirname(__file__))
MEDIA_ROOT = os.path.join(PROJECT_ROOT, 'media')
MEDIA_URL = '/media/'
ADMIN_MEDIA_PREFIX = 'http:/localhost:8000/admin-media/'

мой шаблон html вот так

<link rel="stylesheet" href="/media/css/template.css" type="text/css" />
<link rel="stylesheet" href="/media/css/nivo-slider.css" type="text/css" />
<script type="text/javascript" src="/media/js/jquery-1.4.3.min.js"></script>
<script type="text/javascript" src="/media/js/jquery.nivo.slider.pack.js"></script>

Всякий раз, когда я набираю http://localhost:8000/media/css/template.css, я получаю

AttributeError at /media/css/template.css/

'str' object has no attribute 'resolve'

и на моем сервере djangoЗаписать следующее

    Traceback (most recent call last):

  File "C:\Python27\lib\site-packages\django\core\servers\basehttp.py", line 283, in run
    self.result = application(self.environ, self.start_response)

  File "C:\Python27\lib\site-packages\django\core\handlers\wsgi.py", line 272, in __call__
    response = self.get_response(request)

  File "C:\Python27\lib\site-packages\django\core\handlers\base.py", line 169, in get_response
    response = self.handle_uncaught_exception(request, resolver, sys.exc_info())

  File "C:\Python27\lib\site-packages\django\core\handlers\base.py", line 218, in handle_uncaught_exception
    return callback(request, **param_dict)

  File "C:\Python27\lib\site-packages\django\utils\decorators.py", line 93, in _wrapped_view
    response = view_func(request, *args, **kwargs)

  File "C:\Python27\lib\site-packages\django\views\defaults.py", line 30, in server_error
    t = loader.get_template(template_name) # You need to create a 500.html template.

  File "C:\Python27\lib\site-packages\django\template\loader.py", line 157, in get_template
    template, origin = find_template(template_name)

  File "C:\Python27\lib\site-packages\django\template\loader.py", line 138, in find_template
    raise TemplateDoesNotExist(name)

    TemplateDoesNotExist: 500.html

Когда я набираю http://localhost:8000/home/, моя страница загружается, но ни один из моих css или javascript не загружается ..

Ответы [ 3 ]

1 голос
/ 29 марта 2012

Если вы используете Django впервые, вы должны использовать 1.4.Если вы используете меньшую версию, обновитесь, прежде чем идти дальше.Запуск нового проекта на старой версии фреймворка укусит вас позже.

Итак, учитывая Django 1.4.Вам необходимо следующее (и только следующее):

PROJECT_ROOT = os.path.dirname(__file__)

MEDIA_ROOT = os.path.join(PROJECT_ROOT, 'media')
MEDIA_URL = '/media/'

STATIC_ROOT = os.path.join(PROJECT_ROOT, 'static')
STATIC_URL = '/static/'

STATICFILES_DIRS = (
    os.path.join(PROJECT_ROOT, 'assets'),
)

PROJECT_ROOT - это просто вспомогательная переменная для сохранения повторения;это не имеет ничего общего с Джанго.Каталог «assets» - это то место, куда вы поместите все статические ресурсы всего проекта.Вы можете назвать это как угодно, оно не может совпадать с MEDIA_ROOT или STATIC_ROOT.

Также обратите внимание: MEDIA_ROOT теперь доступен только для загрузки, то есть файлов, добавленных с помощью FileFields и ImageField s на ваших моделях.STATIC_ROOT только для вывода команды управления collectstatic, которую вы будете использовать только в производственной среде;вы сами никогда ничего не храните там.

Если вы используете runserver в разработке, Django автоматически предоставит вам все ваши статические ресурсы. Только если вы используете другой веб-сервер в разработке, вам нужно добавить следующее в urls.py :

from django.contrib.staticfiles.urls import staticfiles_urlpatterns

# ... the rest of your URLconf goes here ...

urlpatterns += staticfiles_urlpatterns()

Наконец, чтобы обслуживать каталог MEDIA_ROOT вdevelopment добавьте следующее в urls.py:

from django.conf import settings

# ... the rest of your URLconf goes here ...

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

В производственном процессе оба MEDIA_ROOT и STATIC_ROOT будут обслуживаться непосредственно вашим веб-сервером, а не Django.

См .: https://docs.djangoproject.com/en/dev/howto/static-files/

0 голосов
/ 29 марта 2012

нам этот код

urlpatterns += patterns('',
    (r'^site_media/(?P<path>.*)$', 'django.views.static.serve', {'document_root': 'media','show_indexes': True}),
    )
0 голосов
/ 29 марта 2012

http://redsymbol.net/articles/django-attributeerror-str-object-no-attribute-resolve/

Допустим, вы работаете над проектом Django, используя его веб-сервер разработки, и вы получаете это исключение при попытке загрузить страницу в браузере:

AttributeError: 'str' object has no attribute 'resolve'

Это потому, что вы забыли набрать слово «pattern».

В частности, в некотором url.py вы набрали что-то вроде этого:

urlpatterns = ('', (r'^$', direct_to_template, {'template':'a.html'}),

# ... when you should have typed this:

urlpatterns = patterns('', (r'^$', direct_to_template, {'template':'a.html'}),

# ... See the difference?

В первомЯ неправильно назначаю urlpatterns как кортеж.Во-вторых, я правильно использую функцию django.conf.urls.defaults.patterns.

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