Уведомления

Группа в Telegram: @pythonsu

#1 Фев. 16, 2012 12:19:02

pal201
От:
Зарегистрирован: 2010-01-05
Сообщения: 83
Репутация: +  0  -
Профиль   Отправить e-mail  

Установить класс activ для ссылок.

Задача касается django опосредованно.

{% for level in levels %}
<li><a href="/level/{{level}}/">Этаж {{level}}</a></li>
{% endfor %}
Как для вывода ссылок установить для конкретной ссылки class active?
Спасибо



Офлайн

#2 Фев. 16, 2012 12:49:08

pustserg
От:
Зарегистрирован: 2011-09-22
Сообщения: 9
Репутация: +  0  -
Профиль   Отправить e-mail  

Установить класс activ для ссылок.

pal201
Задача касается django опосредованно.
{% for level in levels %}
<li><a href="/level/{{level}}/">Этаж {{level}}</a></li>
{% endfor %}
Как для вывода ссылок установить для конкретной ссылки class active?
Спасибо
Ну да django тут в приницпе нипричем

<a href="/level/{{level}}/" class="active">Этаж {{level}}</a>
Но если есть желание все делать через django, то можно и так

<a href="/level/{{level}}/" class = {{class}}>Этаж {{level}}</a>
и передавать {{class}} в шаблон )



Отредактировано (Фев. 16, 2012 12:49:58)

Офлайн

#3 Фев. 16, 2012 16:56:25

pal201
От:
Зарегистрирован: 2010-01-05
Сообщения: 83
Репутация: +  0  -
Профиль   Отправить e-mail  

Установить класс activ для ссылок.

pustserg
pal201
Задача касается django опосредованно.
{% for level in levels %}
<li><a href="/level/{{level}}/">Этаж {{level}}</a></li>
{% endfor %}
Как для вывода ссылок установить для конкретной ссылки class active?
Спасибо
Ну да django тут в приницпе нипричем

<a href="/level/{{level}}/" class="active">Этаж {{level}}</a>
Но если есть желание все делать через django, то можно и так

<a href="/level/{{level}}/" class = {{class}}>Этаж {{level}}</a>
и передавать {{class}} в шаблон )
Вы не поняли. Список выводится циклом. Ссылки получают свои адреса из базы, нужно определить что нажата именно эта ссылка. Как это можно сделать?



Офлайн

#4 Фев. 16, 2012 19:02:00

alexzander77
От:
Зарегистрирован: 2009-01-27
Сообщения: 46
Репутация: +  1  -
Профиль   Отправить e-mail  

Установить класс activ для ссылок.

Anchor Pseudo-classes

Links can be displayed in different ways in a CSS-supporting browser:

Example

a:link {color:#FF0000;} /* unvisited link */
a:visited {color:#00FF00;} /* visited link */
a:hover {color:#FF00FF;} /* mouse over link */
a:active {color:#0000FF;} /* selected link */

Try it yourself »

*кінець цитати*

просто используй css

ну или я тоже не понял что требуется..



Офлайн

#5 Фев. 16, 2012 19:44:33

pal201
От:
Зарегистрирован: 2010-01-05
Сообщения: 83
Репутация: +  0  -
Профиль   Отправить e-mail  

Установить класс activ для ссылок.

alexzander77
Anchor Pseudo-classes

Links can be displayed in different ways in a CSS-supporting browser:

Example

a:link {color:#FF0000;} /* unvisited link */
a:visited {color:#00FF00;} /* visited link */
a:hover {color:#FF00FF;} /* mouse over link */
a:active {color:#0000FF;} /* selected link */

просто используй css

ну или я тоже не понял что требуется..
Возможно, я не понятно выражаюсь.
Нужно определять текущую страницу и применять к ссылке класс.
Что-то типа этого,
{% for menulink in menulinks %}<li
><a href="{{ menulink.url }}"
{% if menulink.extra_title %} title="{{ menulink.extra_title }}" {% endif %}
{% if menulink.isCurrentPage %} class="currentPage" {% endif %}
{% if menulink.isCurrentSection %} class="currentSection" {% endif %}
>{{ menulink.title }}</a></li
но я не могу понять как определить что это текущая страница.



Офлайн

#6 Фев. 16, 2012 20:49:08

alexzander77
От:
Зарегистрирован: 2009-01-27
Сообщения: 46
Репутация: +  1  -
Профиль   Отправить e-mail  

Установить класс activ для ссылок.

HttpRequest.path ?



Офлайн

#7 Фев. 16, 2012 22:15:20

pal201
От:
Зарегистрирован: 2010-01-05
Сообщения: 83
Репутация: +  0  -
Профиль   Отправить e-mail  

Установить класс activ для ссылок.

alexzander77
HttpRequest.path ?
Да, думаю то, что надо. Можно ли пример сопоставления адреса?



Офлайн

#8 Фев. 17, 2012 09:34:53

alexzander77
От:
Зарегистрирован: 2009-01-27
Сообщения: 46
Репутация: +  1  -
Профиль   Отправить e-mail  

Установить класс activ для ссылок.

>>> links = "menu_1,menu_2,menu_3".split(",")
>>> request_path='path/to/menu/menu_2/'
>>> menulinks= [{'isCurrentPage':request_path[:-1].endswith(L)} for L in links]
>>> map(lambda ml,l :ml.setdefault('url',l), menulinks,links)
['menu_1', 'menu_2', 'menu_3']
>>> menulinks
[{'url': 'menu_1', 'isCurrentPage': False}, {'url': 'menu_2', 'isCurrentPage': True}, {'url': 'menu_3', 'isCurrentPage': False}]
>>> for menulink in menulinks:
... print "url %s is currentPage ? %s"%(menulink['url'],menulink['isCurrentPage'])
...
url menu_1 is currentPage ? False
url menu_2 is currentPage ? True
url menu_3 is currentPage ? False



Офлайн

#9 Фев. 19, 2012 11:58:35

pal201
От:
Зарегистрирован: 2010-01-05
Сообщения: 83
Репутация: +  0  -
Профиль   Отправить e-mail  

Установить класс activ для ссылок.

alexzander77
>>> links = "menu_1,menu_2,menu_3".split(",")
>>> request_path='path/to/menu/menu_2/'
>>> menulinks= [{'isCurrentPage':request_path[:-1].endswith(L)} for L in links]
>>> map(lambda ml,l :ml.setdefault('url',l), menulinks,links)
['menu_1', 'menu_2', 'menu_3']
>>> menulinks
[{'url': 'menu_1', 'isCurrentPage': False}, {'url': 'menu_2', 'isCurrentPage': True}, {'url': 'menu_3', 'isCurrentPage': False}]
>>> for menulink in menulinks:
... print "url %s is currentPage ? %s"%(menulink['url'],menulink['isCurrentPage'])
...
url menu_1 is currentPage ? False
url menu_2 is currentPage ? True
url menu_3 is currentPage ? False
Спасибо за ответ.
Вы привели пример обработки для View? То есть формировать список url после выборки из базы? А если передавать только объекты полученный из модели в шаблон и там обрабатывать, то так иже не получится. Ведь есть решение наверно.



Офлайн

#10 Фев. 22, 2012 11:59:12

alexzander77
От:
Зарегистрирован: 2009-01-27
Сообщения: 46
Репутация: +  1  -
Профиль   Отправить e-mail  

Установить класс activ для ссылок.

pal201
Ведь есть решение наверно.
Я, как неспециалист, навскидку придумал только проверку на подстроку
{% for menulink in menulinks %}
{{ menulink }}
{% if menulink in request_path %}
bingo! <br>

{% endif %}
{% endfor %}
>>> from django.template import loader
>>> from django.template import Context
>>> request_path=u"/path/yo/menu/menu_2/"
>>> menulinks=["menu_1","menu_2","menu_3"]
>>> loader.get_template("base.html").render(Context({"menulinks":menulinks,"request_path":request_path}))

u'<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"\n
....
....
<!-- content block-->
menu_1\n
menu_2\n \n bingo! <br>
menu_3\n
...
<!-- footer block-->\n footer\n \n</div>\n</div>\n</body>\n</html>'
но, во-первых, in проверяет на подстроку, и пофиг в каком месте эта подстрока находится, во-вторых в шаблон все равно надо передать request.path или что-то похожее.
можно передать не сам path, a path.split('/') и в шаблоне использовать ifequal

но если мЫ все равно во вьюхе совершаем лишние телодвижения, то почему бы не сработать сразу там и логику?



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version