Как реализовать панировочные сухари в шаблоне Django? - PullRequest
39 голосов
/ 06 мая 2009

Некоторые решения, предоставляемые для поиска в Google «хлебных крошек Django», включают использование шаблонов и block.super, в основном просто расширение базовых блоков и добавление к ним текущей страницы. http://www.martin -geber.com / мысль / 2007/10/25 / панировочные сухари-Джанго-шаблоны /

http://www.djangosnippets.org/snippets/1289/ - предоставляет тег шаблона, но я не уверен, что это сработает, если у вас не будет должным образом объявлен ваш urls.py.

Мне интересно, как лучше? И если вы уже реализовали панировочные сухари, как вы это делали?

--- Редактировать -

Мой вопрос должен был звучать так: есть ли общепринятый метод приготовления панировочных сухарей в Django, но из ответов, которые я вижу, нет, и есть много разных решений, я не уверен, кто присудит правильный ответ к, как я использовал вариант использования метода block.super, в то время как все приведенные ниже ответы будут работать.

Полагаю, это слишком субъективный вопрос.

Ответы [ 12 ]

0 голосов
/ 06 марта 2013

Возможно, вы захотите попробовать django-headcrumbs (не волнуйтесь, они не съедят ваш мозг).

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

Вот пример из документации:

from headcrumbs.decorators import crumb
from headcrumbs.util import name_from_pk

@crumb('Staff')  # This is the root crumb -- it doesn’t have a parent
def index(request):
    # In our example you’ll fetch the list of divisions (from a database)
    # and output it.

@crumb(name_from_pk(Division), parent=index)
def division(request, slug):
    # Here you find all employees from the given division
    # and list them.

Есть также некоторые служебные функции (например, name_from_pk, которые вы можете видеть в примере), которые автоматически генерируют хорошие имена для ваших крошек, без необходимости писать много кода.

0 голосов
/ 06 мая 2009

Нечто подобное может работать для вашей ситуации:

Захватите весь URL в вашем представлении и сделайте ссылки с него. Это потребует изменения вашего urls.py, каждого представления, в котором должны быть хлебные крошки, и ваших шаблонов.

Сначала вы должны захватить весь URL в файле urls.py

оригинал urls.py
...
(r'^myapp/$', 'myView'),
(r'^myapp/(?P<pk>.+)/$', 'myOtherView'),
...
новый urls.py
...
(r'^(?P<whole_url>myapp/)$', 'myView'),
(r'^(?P<whole_url>myapp/(?P<pk>.+)/)$', 'myOtherView'),
...

Тогда, на ваш взгляд, что-то вроде:

views.py
...
def myView(request, whole_url):
    # dissect the url
    slugs = whole_url.split('/')
    # for each 'directory' in the url create a piece of bread
    breadcrumbs = []
    url = '/'
    for slug in slugs:
        if slug != '':
            url = '%s%s/' % (url, slug)
            breadcrumb = { 'slug':slug, 'url':url }
            breadcrumbs.append(breadcrumb)

    objects = {
        'breadcrumbs': breadcrumbs,
    }
    return render_to_response('myTemplate.html', objects)
...

Который должен быть извлечен в функцию, которая импортируется в представления, которым это необходимо

Тогда в вашем шаблоне распечатайте панировочные сухари

myTemplate.html
...
<div class="breadcrumb-nav">
    <ul>
    {% for breadcrumb in breadcrumbs %}
        <li><a href="{{ breadcrumb.url }}">{{ breadcrumb.slug }}</a></li>
    {% endfor %}
    </ul>
</div>
...

Одним из недостатков такой работы является то, что в ее нынешнем виде вы можете отображать только часть каталога в качестве ссылки. Единственное исправление для этого (вероятно, не очень хорошее) - сохранить словарь в файле, который определяет функцию breadcrumb.

Во всяком случае, это один способ, которым вы могли бы сделать панировочные сухари, ура :)) 1023 *

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