Created on Oct. 14, 2012, 10:55 a.m. by Hevok & updated on Nov. 23, 2012, 2:23 a.m. by Hevok
A breadcrumb is a navigation (rootline) which allows to keep track of the current locations within programs or documents.
¶
¶
To create a breadcrumb in a view the following approach could be utilized:
¶
¶
.. sourcecode:: python
¶
¶
$ nano models.py
¶
...
¶
class Category(MPPTModel):
¶
name = models.CharField(max_length=50, verbose_name=u'Name')
¶
slug = modelsSlugField()
¶
parent = TreeForeignKey('self', null=True, blank=True, related_name='children')
¶
...
¶
class Entry(models.Model):
¶
name = models.CharField(max_length=50, verbose_name=u'Name')
¶
slug = models.SlugField()
¶
category = models.ManyToManyField('Category', verbose_name=u'Category')
¶
¶
.. sourcecode:: python
¶
¶
$ nano views.py
¶
...
¶
def view(request, pk):
¶
entry = get_object_or_404(Entry, pk=pk)
¶
return render_to_response('entry_view.html', {'entry': entry},
¶
context_instance=RequestContext(request)
¶
...
¶
¶
.. sourcecode:: django
¶
¶
$ nano entry_view.html
¶
...
¶
{{ entry }}
¶
¶
¶
In order to have a single view entry info ('entry_content') breadcrump with category. Something like this can be implemented: Category > Subcategory > Sub-Subcategory ... by using get_ancestor:
¶
¶
.. sourcecode:: django
¶
¶
{% for parent in category.get_ancestor %}
¶
<a href="/data/entry/{{ parent.slug }}">{{ parent.name }}</a>&gt;
¶
{% endfor %}
¶
{{ category.title }}
¶
¶
¶
The breadcrump can be kept completely separate from any custom code logic.
¶
¶
context['breadcrumb'] = ['menu1', 'sub menu2', 'sub sub menu3']
¶
¶
Then in the templates something like will be defined:
¶
¶
.. sourcecode:: django
¶
¶
{% if x. == 'menu1' %}
¶
do something custom here
¶
{% endfor %}
¶
¶
{% for x in breadcrumb %}
¶
{{ x }}
¶
{% endfor %}
¶
¶
{% include "breadcrumb.html" %}
Comment on This Data Unit