Django: Есть ли лучший путь к полужирному текущая ссылка страницы

int number;
int randomValue = qrand() % number;

возвращает случайное число randomValue с 0 < = randomValue < number.

qrand() объявлен в QtGlobal , который # включен во многие другие файлы Qt.

int value;
QString aString = QString::number(value);

преобразует целое число в QString.

7
задан Net Citizen 21 June 2009 в 15:43
поделиться

3 ответа

Вот элегантный способ сделать это, который я скопировал откуда-то, и мне только жаль, что я не мог вспомнить где, чтобы я мог отдать им должное. 8 -)

Я назначаю id каждой из моих страниц (или всем страницам в разделе) следующим образом:

In index.html:    <body id='section-intro'>...
In faq.html:      <body id='section-faq'>...
In download.html: <body id='section-download'>...

И затем id для соответствующих ссылок :

<li id='nav-intro'><a href="./">Introduction</a></li>
<li id='nav-faq'><a href="./faq.html">FAQ</a></li>
<li id='nav-download'><a href="./download.html">Download</a></li>

И в CSS я установил такое правило:

#section-intro #nav-intro,
#section-faq #nav-faq,
#section-download #nav-download {
    font-weight: bold;
    /* And whatever other styles the current link should have. */
}

Таким образом, это работает в основном декларативным способом, чтобы управлять стилем ссылки, которой принадлежит текущая страница. Вы можете увидеть это в действии здесь: http://entrian.com/source-search/

После настройки это очень чистая и простая система, потому что:

  • Вам не нужно возиться с разметкой шаблона в вашем ссылки
  • Вы не делаете ' в конечном итоге используются большие уродливые операторы переключателя или операторы if / else / else
  • Добавление страниц в раздел Just Works [TM]
  • Изменение внешнего вида только когда-либо означает изменение CSS, а не разметки.

Я не использую Django, но эта система работает где угодно. В вашем случае, когда вы «устанавливаете собственные соответствующие заголовки и содержимое», вам также необходимо установить идентификатор тела , и никакой другой разметки Django не требуется.

Эта идея легко распространяется и на другие ситуации. , например. «Мне нужна ссылка для скачивания на боковой панели на каждой странице, кроме самих страниц для скачивания». Вы можете сделать это в CSS следующим образом:

#section-download #sidebar #download-link {
    display: none;
}

вместо того, чтобы помещать условную разметку шаблона в HTML-код боковой панели.

16
ответ дан 6 December 2019 в 09:21
поделиться

Я вижу только пару способов сделать это, избегая повторения ifequals:

  1. Javascript. Что-то вроде (jQuery):

     var parts = window.location.pathname.split ('/');
    var page = parts [parts.length-1];
    $ ('# sidebar1 a [href * =' + page + ']'). addClass ('текущий');
    
  2. Измените свои представления, чтобы они содержали список страниц со связанными с ними заголовками и URL-адресами, и создайте цикл {% for%} в своем шаблоне, который будет проходить через этот список и добавлять один {% ifequal%}.

Вариант 2 - мой любимый вариант. Если логика для всех ваших страниц одинакова и различаются только шаблоны, вы можете рассмотреть возможность использования модели FlatPages для каждой из ваших страниц. Если логика отличается и вам нужны разные модели, вы можете рассмотреть возможность использования какого-либо приложения для меню. Бесстыдный плагин: у меня есть собственное приложение для меню

1
ответ дан 6 December 2019 в 09:21
поделиться

Не использовал Django, но я имел дело с той же проблемой в Kohana (PHP) и Rails.

Что я делаю в Kohana:

<li><a href="/admin/dashboard" <?= (get_class($this) == 'Dashboard_Controller') ? "class=\"active\"" : NULL ?>>Dashboard</a></li>
<li><a href="/admin/campaigns" <?= (get_class($this) == 'Campaigns_Controller') ? "class=\"active\"" : NULL ?>>Campaigns</a></li>
<li><a href="/admin/lists" <?= (get_class($this) == 'Lists_Controller') ? "class=\"active\"" : NULL ?>>Lists</a></li>

] Что я делаю в Rails:

<li><a href="/main" <%= 'class="active"' if (controller.controller_name == 'main') %>>Overview</a></li>
<li><a href="/notifications" <%= 'class="active"' if (controller.controller_name == 'notifications') %>>Notifications</a></li>
<li><a href="/reports" <%= 'class="active"' if (controller.controller_name == 'reports') %>>Reports</a></li>
2
ответ дан 6 December 2019 в 09:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: