У меня есть переменная STATIC_URL, объявленная в settings.py в моем базовом проекте:

STATIC_URL = '/site_media/static/'

Это используется, например, в моем site_base.html, который ссылается на файлы CSS следующим образом:

<link rel="stylesheet" href="{{ STATIC_URL }}css/site_tabs.css" />

У меня есть множество шаблонов, связанных с различными приложениями, которые расширяют site_base.html, и когда я смотрю на них в своем браузере, CSS правильно связывается как

<link rel="stylesheet" href="/site_media/static/css/site_tabs.css" />

(Они поставлялись с дистрибутивом pinax по умолчанию.) Я создал новое приложение под названием «курсы», которое находится в папке ..... / apps / course. У меня есть представление для одной из страниц в курсах под названием courseinstance.html, которая расширяет site_base.html, как и другие.

Однако, когда он отображается в моем браузере, он выглядит как

<link rel="stylesheet" href="css/site_tabs.css" />

Как если бы STATIC_URL был равен "" для этого приложения. Нужно ли мне делать какое-то объявление, чтобы мое приложение принимало те же значения переменных, что и проект? У меня нет файла settings.py для приложения. кстати, приложение указано в моем списке INSTALLED_APPS, и оно отлично обслуживается, только без ссылки на файл CSS (поэтому страница выглядит забавно).

Заранее спасибо за помощь.

0
unsorted 30 Май 2010 в 04:10

2 ответа

Лучший ответ

Переменные в settings.py недоступны для шаблонов. То, что доступно для шаблона, определяется представлением, которое его отображает. Когда шаблон визуализируется, вы передаете словарь, который является «контекстом» для шаблона. Контекст - это словарь имен переменных и их значений.

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

from django.conf import settings
def my_view(request):
    # view logic
    context = {
            'STATIC_URL': settings.STATIC_URL,
            # other template variables here
    }
    # render the template and produce a response

Ваши настройки STATIC_URL кажутся очень похожими на настройку MEDIA_URL .

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

2
rz. 30 Май 2010 в 01:14
def courseinstance(request, courseinstance_id):
    p = get_object_or_404(CourseInstance, pk=courseinstance_id)
    return render_to_response('courses/courseinstance.html', {'courseinstance': p},
        context_instance=RequestContext(request)) #added this part to fix problem
0
unsorted 30 Май 2010 в 01:19