Как использовать несколько таблиц стилей в Django, где таблица стилей определяется переменной GET, не нарушая DRY?

Я пишу веб-сайт, который будет иметь несколько скинов. Каждый скин имеет свою собственную таблицу стилей. Я бы хотел, чтобы скин определялся с помощью переменной GET, чтобы этот URL:

whatever?skin=foo

приведет к отображению страницы, содержащей этот HTML-код в заголовке:

<link rel="stylesheet" type="text/css" href="/site_media/foo.css"/>

(Обычно я хочу, чтобы скин определялся предпочтениями пользователя, но я также хочу сделать это таким образом, чтобы пользователь мог предварительно просмотреть, как будет выглядеть новый скин, а также для облегчения его разработки. .)

Это довольно легко сделать в Django, например, вы можете использовать шаблон с этой строкой:

<link rel="stylesheet" type="text/css" href="/site_media/{{skin}}.css"/>

И такой вид:

def whateverView(request):
    """ called by URL /whatever """
    skin = request.GET.get('skin', "default")
    c = RequestContext(request, {'skin': skin})
    html = whateverTemplate.render(c)
    return HttpResponse(html)

Но я не хочу делать это так, потому что мне пришлось бы добавлять один и тот же код к каждому представлению, что нарушило бы СУХОЙ.

Итак, есть ли способ сделать это так, чтобы он работал на всех моих страницах, а код писался только один раз?


person Phil Hunt    schedule 07.03.2011    source источник


Ответы (1)


Вы можете сделать это с помощью контекстных процессоров Django: http://docs.djangoproject.com/en/dev/ref/templates/api/?#writing-your-own-context-processors. Или вы можете включить django.core.conext_processors.request и получить доступ к объекту запроса в своем шаблоне.

person Bjorn    schedule 07.03.2011
comment
Это работает, спасибо. Хотя одна небольшая проблема: в settings.py я сначала пытался: - person Phil Hunt; 07.03.2011