Как я могу получить MEDIA_URL из шаблона Django? - PullRequest
3 голосов
/ 06 сентября 2011

Я несколько смущен тем, как Django работает со статическим контентом.По сути, в файле settings.py мы определяем MEDIA_URL, который указывает на URL-адрес, который будет использоваться при разрешении статических носителей, таких как скрипты и стили, а также MEDIA_ROOT, ссылку на место, где живут файлы в файловой системе.

Однако не совсем понятно, как я могу получить доступ к MEDIA_URL из шаблона, и это довольно важно , если я хочу использовать механизм Django для загрузки статическогосодержание вообще.По сути, мой базовый шаблон выглядит примерно так:

<html>
   <head>
       {% block styles %}
       <link rel="stylesheet" href="{{ MEDIA_URL }}styles/master.css"/>
       {% endblock %}
       <title>{% block title %}Page Title{% endblock %}</title>
   </head>
   <body>
      {% block scripts %}
      <script type="text/javascript" src="{{ MEDIA_URL }}scripts/jquery.js"></script>
      {% endblock %}
   </body>
</html>

Будет ли работать приведенный выше код на самом деле?Я слышал, что вы должны использовать другие плагины, чтобы запустить что-то подобное, что кажется странным, поскольку, вероятно, весь смысл определения MEDIA_URL заключается в использовании его в шаблонах.

Ответы [ 2 ]

5 голосов
/ 07 сентября 2011

Чтобы получить доступ к STATIC_URL в своих шаблонах, убедитесь, что django.core.context_processors.static в TEMPLATE_CONTEXT_PROCESSORS, и что вы используете RequestContext. Подробнее здесь .

Кроме того, статические файлы должны быть помещены в STATIC_URL, а не MEDIA_URL, если это не загруженный пользователем контент.

1 голос
/ 06 сентября 2011

Я бы сказал, что вам не нужно использовать MEDIA_URL и MEDIA_ROOT для ваших файлов Js, CSS, IMG!

Вместо этого я использую STATIC_ROOT, STATIC_URL!насколько мне известно, MEDIA_ * предназначена для загрузки файлов, таких как изображения или любой документ!

Также я использую STATIC_ *, потому что в моем случае мои файлы js, css, ... находятся вS3 хранилище!поэтому, когда я запускаю collectstatic, он просто копирует все мои файлы STATIC в мое облачное хранилище!Так что в моих шаблонах у меня есть что-то вроде этого:

    {% block js %}
        <script src="{{ STATIC_URL }}js/libs/modernizr-2.0.min.js"></script>
        <script src="{{ STATIC_URL }}js/libs/respond.min.js"></script>
    {% endblock %}

Проверьте это примечание от Django docs :

Примечание В предыдущих версиях Django,было принято размещать статические ресурсы в MEDIA_ROOT вместе с загруженными пользователями файлами и обслуживать их оба в MEDIA_URL.Одной из целей введения приложения staticfiles является упрощение разделения статических файлов на файлы, загруженные пользователем.

По этой причине вам необходимо отличать MEDIA_ROOT и MEDIA_URL от ваших STATIC_ROOT и STATIC_URL.Вам нужно будет самостоятельно организовать доставку файлов в MEDIA_ROOT;staticfiles вообще не работает с загруженными пользователем файлами.Однако вы можете использовать представление django.views.static.serve () для предоставления MEDIA_ROOT в разработке;см. Обслуживание других каталогов.

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