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

Я пишу сайт, который будет иметь несколько скинов. Каждый скин имеет свою собственную таблицу стилей. Я хотел бы, чтобы скин определялся переменной 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)

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

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

1 Ответ

3 голосов
/ 07 марта 2011

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

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