Как использовать django-sitetree?2,0 - PullRequest
2 голосов
/ 22 октября 2011

У меня досадные проблемы при использовании django-sitetree (версия 0.5.1) для создания меню навигации с помощью Django. В целях тестирования я попытался настроить django-sitetree для создания sitetree для приложения «Опросы» ( официальный учебник по Django ). Я настроил его в соответствии с некоторыми инструкциями, отвечающими на предыдущий вопрос - но у меня возникли проблемы с использованием шаблонов URL, которые у меня не работали.

Итак, это мои шаблоны URL для "Опросы", которые включены в / опросы (я не использую косую черту):

urlpatterns = patterns('polls.views',
    (r'^$', 'index'),
    (r'^/(?P<poll_id>\d+)$', 'detail'),
    (r'^/(?P<poll_id>\d+)/results$', 'results'),
    (r'^/(?P<poll_id>\d+)/vote$', 'vote'),
)

Я только настроил представления index и detail, например, через администратора Django:

Title                        URL
My site                      /
+ Polls                      polls.views.index
  + Poll {{ poll.question }  polls.views.detail poll.id

, который выдает следующий вывод, используя {% sitetree_menu from "maintree" include "trunk" %} на моей главной странице /

Title                        URL
My site                      /
+ Polls                      /polls
  + Poll                     #unresolved

Но я ожидаю :

Title                        URL
My site                      /
+ Polls                      /polls
  + Poll foo                 /polls/1
  + Poll Test #2             /polls/2

Я уже пробовал несколько вещей, таких как использование именованных представлений в urls.py (как рекомендуется в документации), но я даже не получаю простой {% sitetree_url %} работы с параметрами. Жаль, что в Интернете нет ничего полезного, кроме некоторых копий ответа, упомянутого выше. Я был бы признателен, если бы кто-нибудь помог мне с более подробным. Спасибо за вашу помощь!

1 Ответ

1 голос
/ 24 октября 2011

В настоящее время приложение не может удовлетворить ваши ожидания, т. Е. Оно не может определить, сколько опросов вы описали своим "Poll {{poll.question}", и какие из них вы хотите показать. в меню.

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

Тем не менее, есть несколько способов справиться с этим:

  1. Создайте записи для каждого опроса, который вам необходим вручную;

  2. Добавить запись опроса в дерево при создании нового опроса, например, используя сигналы и API модели. Как видите, он такой же, как вариант 1, но автоматизирован;

  3. Не показывать "Опрос {{poll.question}" в меню и в дереве, но только в сухарях. Таким образом, рассматривая страницу «Опросы» для навигации по списку опросов. В случае хлебных крошек "Опрос {{poll.question}" будет преобразован в полный заголовок на странице пула в соответствии с заданными правилами.


Для hardyharzen , который просит в комментариях пример № 2:

Предположим, мы все еще говорим об опросах. Поместите следующий код в файл models.py приложения для опросов.

Обратите внимание, что этот код добавляет элемент дерева в дерево сайта с идентификатором 1, в ветвь дерева с идентификатором 10 и ожидает, что модель опроса определит метод get_absolute_url ().

from django.db.models.signals import post_save  
from django.dispatch import receiver  
from sitetree.models import TreeItem

-

@receiver(post_save, sender=Poll)
def on_poll_add(instance, created, **kwargs)
    if created:
        tree_item = TreeItem(title=instance.title, tree_id=1, 
            parent_id=10, url=instance.get_absolute_url())  
        tree_item.save(force_insert=True)
...