django - переменная, объявленная в базовом проекте, не отображается в приложении - PullRequest
0 голосов
/ 30 мая 2010

У меня есть переменная с именем 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 / courses. У меня есть представление для одной из страниц курсов под названием courseinstance.html, которая расширяет site_base.html, как и другие.

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

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

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

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

Ответы [ 2 ]

2 голосов
/ 30 мая 2010

Переменные в 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, чтобы понять.

0 голосов
/ 30 мая 2010
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
...