Добрый день. Недавно начал знакомство с Django.
Столкнулся с некоторыми сложностями,сам пока не могу додуматься,прошу вашей помощи. Использую django 1.8
У меня есть модель статей и модель категорий.
Все это дело я вывел в виде главного выпадающего меню.
Я хочу разместить его на всех страницах сайта.
Понял,что для этого надо использовать шаблонный тег.
from django.db import models
from mptt.models import MPTTModel, TreeForeignKey
import mptt
class Category(MPTTModel):
class Meta():
db_table = 'category'
verbose_name_plural = "Категории"
verbose_name = "Категории"
ordering = ('tree_id', 'level')
name = models.CharField(max_length=150, verbose_name="Категория")
parent = TreeForeignKey('self', null=True, blank=True, related_name="children", verbose_name="Родитель")
url = models.CharField(max_length=200,blank=True, null=True, verbose_name="URL-адрес")
category_title = models.TextField(verbose_name="Описание разделов меню", blank=True, null=True)
def __str__(self):
return self.name
class MPTTMeta:
order_insertion_by = ['name']
mptt.register(Category, order_insertion_by=['name'])
class Article(models.Model):
class Meta():
db_table = 'article'
verbose_name_plural = 'Статьи'
verbose_name = 'Статья'
article_title = models.CharField(max_length=200, verbose_name="Имя статьи")
article_text = models.TextField(verbose_name="Текст статьи")
article_date = models.DateTimeField(verbose_name="Дата публикации")
category = TreeForeignKey(Category, blank=True, null=True, related_name='cat', verbose_name="Выберите категорию")
def __str__(self):
return (self.article_title)
Создаю шаблон для меню top_menu.html
{% load staticfiles %}
{% load mptt_tags %}
{% load i18n mptt_tags %}
<ul class="nav">
<li>
<a href="#">Пункт-выпадающий</a>
<ul>
{% recursetree projects %}
<li>
<a href="/{{node.url}}" title="{{node.category_title}}">{{node}}</a><hr/>
{% if not node.is_leaf_node %}
<ul>
<li><a href="#">{{children}}</a></li>
</ul>
{% endif %}
</li>
{% endrecursetree %}
</ul>
/li>
</ul>
</pre>
Затем создаю шаблонный тег:
В папке проекта создаю директорию и файл \templatetags\top_menu.py
Внутри файла пишу следующее:
from django import template
from article.models import Article, Category
register=template.Library()
@register.inclusion_tag('top_menu.html', takes_context=True)
def show_category(context, category_id=1):
args = {'category': Category.objects.filter(id=category_id),
'article': Article.objects.filter(category_id=category_id),
'projects': Category.objects.all()}
return {'topmenu':args}
Вставляю тег в основной шаблон (main.html)
{% load top_menu %}
{% show_category %}
И получаю следующую ошибку:
Error during template rendering
In template /home/pasha/photolabkazan/article/templates/top_menu.html, error at line 13
Failed lookup for key [%s] in %r
3
4
5
6 {% load mptt_tags %}
7 {% load i18n mptt_tags %}
8 <ul class="nav">
9 <li><a href="#" >Пункт1</a></li>
10 <li>
11 <a href="#">Пункт2-выпадающий</a>
12 <ul>
13
{% recursetree projects %}
14
15 <li>
16 <a href="/{{node.url}}" title="{{node.category_title}}">{{node}} </a><hr/>
17 {% if not node.is_leaf_node %}
18 <ul>
19 <li><a href="#">{{children}}</a></li>
20 </ul>
21 {% endif %}
22
23 </li>
Похоже,я не правильно вывожу context. Как его вывести правильно? В чем ошибка? Куда копать?
PS:искал на форуме,подобный вопрос был,
http://djbook.ru/forum/topic/2483/ ,но пока особых продвижений нет
Спасибо)
Updated 4 Aug. 2016, 14:16 by zubat.