переключение тем, размещение шаблонов и CSS-файлов на сайте Django - PullRequest
2 голосов
/ 23 февраля 2011

На моем сайте django я хочу предложить несколько тем для наших лучших клиентов и для босса. Поэтому я быстро создал следующее. - Я рад, что мне удалось представить его, но есть несколько грязных хаков, которые я хочу устранить с помощью хороших решений, о которых я вас прошу.

Вот мой хак

base.html говорит (будь осторожен - безобразно!)

{% ifequal theme "0" %}
    {% include "base_d0.html" %}
{% endifequal %}

{% ifequal theme "1" %}
    {% include "base_d1.html" %}
{% endifequal %}

{% ifequal theme "2" %}
    {% include "base_d2.html" %}
{% endifequal %}

Затем я сохранил в папке MEDIA подкаталоги для всех распространенных css и js

и созданные подкаталоги

static/
  d0/     ( all theme 0 stuff )
    css/
    js/
  d1/     ( all theme 1 stuff )
    css/
    js/
  ...
  css/
    (all common css)
  js/
    (all common js)

В моем контроллере есть метод переключения дизайна, текущий хранится в файле cookie. Он проверяется при каждом запросе и в шаблоне контекстной переменной PREFIX_STATIC в соответствии с /mypathto/static/d0 resp. +d1 +d2 и, конечно, мне пришлось изобрести COMMON_STATIC var. И тема var установлена ​​для переключателя base.html.

Конечно, я гуглил еще до начала, но мне было трудно найти хорошие поисковые термины (как я ожидаю, есть много хороших ресурсов)

1 Ответ

4 голосов
/ 23 февраля 2011

из loader_tags.py Include_Node do_extends doc:

This tag may be used in two ways: ``{% extends "base" %}`` (with quotes)
uses the literal value "base" as the name of the parent template to extend,
or ``{% extends variable %}`` uses the value of ``variable`` as either the
name of the parent template to extend (if it evaluates to a string) or as
the parent tempate itelf (if it evaluates to a Template object).

Поэтому я изменил свои шаблоны на

{% extends base %} 

вместо

{% extends "base.html" %}

и установил контекстvar "base" как theme + "/base.html" в моем главном контроллере, прежде чем я вызову get_template

...