В Django, как определить «путь к местоположению», чтобы показать его пользователям? - PullRequest
0 голосов
/ 20 мая 2010

Я хочу разместить «путь к месту» на моих страницах, показывающий, где находится пользователь. Предположим, что пользователь просматривает один продукт, это может быть Index > Products > ProductName, где каждое слово также является ссылкой на другие страницы.

Я думал о передаче в шаблон переменной с путем, подобным [(_('Index'), 'index_url_name'), (_('Products'), 'products_list_url_name'), (_('ProductName'), 'product_url_name')]

Но тогда мне интересно, где и как бы вы определили иерархию, не повторяя себя (СУХОЙ)?

Насколько я знаю, я видел два варианта

  • Чтобы определить иерархию в urlconf. Это может быть хорошим местом, так как иерархия URL должна быть похожа на «путь расположения», но я закончу повторять фрагменты путей.
  • Для написания контекстного процессора, который угадывает путь к местоположению по URL и включает переменную в контекст. Но это подразумевает сохранение независимой иерархии, которую нужно будет синхронизировать с URL-адресами каждый раз, когда я изменяю их.

Кроме того, я не уверен, как обращаться с URL, для которых требуются параметры.

У вас есть совет или совет по этому поводу? Есть ли канонический способ сделать это?

Ответы [ 2 ]

1 голос
/ 20 мая 2010

В Django есть несколько фрагментов и приложений для многократного использования. Вот несколько на что посмотреть.

Отрывки:
http://djangosnippets.org/snippets/1487/
http://djangosnippets.org/snippets/1026/

Программа:
http://code.google.com/p/django-breadcrumbs/
http://code.google.com/p/django-crumbs/

Надеюсь, один из них сработает для вас или, по крайней мере, направит вас в правильном направлении.

0 голосов
/ 20 мая 2010

«Иерархия» обычно подразумевается URL-адресами.

Вы можете - тривиально - добавить информацию в urls.py, которая передается в функцию просмотра. Это может быть передано в шаблон с помощью функции просмотра.

См. http://docs.djangoproject.com/en/1.2/topics/http/urls/#patterns

Укажите "дополнительный словарь" в ваших URL с информацией о пути.

Вы также можете сделать это.

url( r'/(?P<level1>path)/(?P<level2>to)/(?P<level3>resource)/', ... )

Это может сэкономить некоторое "повторение".

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