STATIC_URL не работает - PullRequest
       1

STATIC_URL не работает

20 голосов
/ 07 июня 2011

Я изо всех сил пытаюсь извлечь медиа для моих шаблонов, используя переменную STATIC_URL . Например, у меня есть этот код

{% extends "admin/change_list.html" %}
{% load i18n %}

{% block extrahead %}
<!--[if IE]>
<script type="text/javascript" src="{% firstof STATIC_URL MEDIA_URL %}django_qbe/js/excanvas.js"></script>
<![endif]-->
<script type="text/javascript" src="{% firstof STATIC_URL MEDIA_URL %}django_qbe/js/jquery.js"></script>

Каждый раз, когда шаблон загружается, он пытается выполнить MEDIA_URL . Если я изменю это на

{% extends "admin/change_list.html" %}
{% load i18n %}
{% load static %}
{% block extrahead %}
<!--[if IE]>
<script type="text/javascript" src="{% get_static_prefix %}django_qbe/js/excanvas.js"></script>
<![endif]-->
<script type="text/javascript" src="{% get_static_prefix %}django_qbe/js/jquery.js"></script>

Мой вопрос: почему не работает моя первая версия этого шаблона?

Ответы [ 6 ]

60 голосов
/ 07 июня 2011

Существует статический контекстный процессор , который отличается от media. Вам нужно убедиться, что в вашем списке обработчиков контекста есть django.core.context_processors.static, чтобы он мог добавить STATIC_URL в контекст.

17 голосов
/ 23 октября 2012

Из документов:

Если {{STATIC_URL}} не работает в вашем шаблоне, вы, вероятно, не используете RequestContext при рендеринге шаблона.

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

8 голосов
/ 04 февраля 2013

Большинство вещей уже упоминалось, но для компиляции и добавления немного:

  1. Убедитесь, что ваш файл settings.py правильно указывает расположение ваших статических файлов. Как писал Стивен Кит, у вас должно быть что-то вроде:

    # Absolute path to the directory static files should be collected to.
    # Don't put anything in this directory yourself; store your static files
    # in apps' "static/" subdirectories and in STATICFILES_DIRS.
    # Example: "/home/media/media.lawrence.com/static/"
    STATIC_ROOT = ''
    
    STATIC_URL = '/static/'
    
    ADMIN_MEDIA_PREFIX = '/static/admin/'
    
    import os
    # Additional locations of static files
    STATICFILES_DIRS = (
        os.path.join(os.path.dirname(__file__), 'static'),
    )
    
  2. Затем убедитесь, что ваши TEMPLATE_CONTEXT_PROCESSORS включают 'django.core.context_processors.static'. Если в вашем файле settings.py нет записи для TEMPLATE_CONTEXT_PROCESSORS, то по умолчанию она соответствует приведенному ниже, и у вас все хорошо.

    TEMPLATE_CONTEXT_PROCESSORS = (
        'django.core.context_processors.debug',
        'django.core.context_processors.i18n',
        'django.core.context_processors.media',
        'django.core.context_processors.static',
        'django.contrib.auth.context_processors.auth',
        'django.contrib.messages.context_processors.messages',
    )
    
  3. Убедитесь, что вы используете RequestContext при визуализации ваших шаблонов. django.shortcuts.render делает это по умолчанию (см. здесь ), поэтому вы можете просто позвонить

    from django.shortcuts import render
    
    def myViewFunction(request):
        return render(request, 'myTemplate.html')
    

    Будьте осторожны, так как django.shortcuts.render_to_response не сделает этого за вас, если вы не добавите аргумент, поэтому вам придется написать что-то вроде

    from django.shortcuts import render_to_response
    
    def myViewFunction(request):
        return render_to_response('myTemplate.html', myContext, context_instance=RequestContext(request))
    
7 голосов
/ 09 декабря 2013

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

Я изменил мой с

<link href="{{ STATIC_URL }}css/survey.less" media="screen" rel="stylesheet" type="text/css"/>

на:

<link href="{% static "css/style.less" %}" media="screen" rel="stylesheet" type="text/less"/>

А теперь работает нормально.Гораздо проще, и я подозреваю, что это также немного более «правильный» способ использовать static сейчас (начиная с Django 1.4) в любом случае.Пожалуйста, смотрите Django docs для получения дополнительной информации о специфике.

Не забудьте добавить {% load static from staticfiles %} вверху ваших шаблонов, которые тоже его используют.

4 голосов
/ 07 июня 2011

Поскольку меня обвиняют в том, что я не отвечаю на вопрос, позвольте мне прояснить процесс мышления:

My question is why doesn't my first version of this template work?

STATIC_URL is returning a False value

Чтобы определить почему, вот шаги, которые я бы использовал:

  • Попробуйте напечатать его в теле шаблона - {{STATIC_URL}}.

  • Проверьте settings.py, чтобы убедиться, что значение установлено - STATIC_URL = '/ static /'

Проверьте, правильно ли настроены файлы STATIC в runserver:

https://docs.djangoproject.com/en/1.3/ref/contrib/staticfiles/

Для справки я использую:

# Absolute path to the directory static files should be collected to.
# Don't put anything in this directory yourself; store your static files
# in apps' "static/" subdirectories and in STATICFILES_DIRS.
# Example: "/home/media/media.lawrence.com/static/"
STATIC_ROOT = ''

STATIC_URL = '/static/'

ADMIN_MEDIA_PREFIX = '/static/admin/'

# Additional locations of static files
STATICFILES_DIRS = (
    os.path.join(PROJECT_DIR, 'static'),
)

или псевдоним Apache:

Alias /static /Users/stevenkeith/foo/bar/static

<Directory /Users/stevenkeith/foo/bar/static>
    Order deny,allow
    Allow from all
</Directory>

или любой другой метод, который вы хотите, nginx и т. Д.

2 голосов
/ 22 сентября 2018

Вот учебник для реализации загрузки статического изображения

дерево

tree

setting.py

setting.py

base.html

base.html

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