Подтвердить что ты не робот

STATIC_URL не работает

Я пытаюсь вытащить средства массовой информации для своих шаблонов, используя переменную 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>

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

4b9b3361

Ответ 2

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

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

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

Ответ 3

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

  • Убедитесь, что ваш файл 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'),
    )
    
  • Затем убедитесь, что ваш 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',
    )
    
  • Убедитесь, что вы используете 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))
    

Ответ 4

Для меня ответ был просто прекратить использование 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"/>

И теперь это прекрасно работает. Гораздо проще, и я подозреваю, что это также немного "более правильный" способ использовать статику сейчас (по Django 1.4). Дополнительную информацию об особенностях см. В Django docs.

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

Ответ 5

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

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 на сервере задач:

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 и т.д.