如何使用django-sitetree? 2.0

时间:2011-10-21 21:38:34

标签: django navigation sitemap breadcrumbs

使用django-sitetree(版本0.5.1)生成带Django的导航菜单时,我遇到了令人讨厌的问题。出于测试目的,我尝试配置django-sitetree为“民意调查”应用程序(official Django tutorial)创建一个sitetree。我根据some instructions answering a prior question配置了它 - 但是我使用url模式遇到了麻烦,这对我来说无效。

所以这些是我的“民意调查”的网址模式,它们包含在/ polls中(我不使用尾部斜杠):

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'),
)

我只通过Django admin配置了indexdetail这样的视图:

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 个答案:

答案 0 :(得分:1)

目前该应用程序无法满足您的期望,即它无法确定您通过“轮询{{poll.question}”描述了多少次民意调查,以及您希望显示哪些民意调查?在菜单中。

我应该尝试考虑这个功能,但坦率地说,我不会考虑在菜单中放置数十个民意调查。

尽管如此,有几种方法可以应对它:

  1. 为您需要手动创建每个投票的条目;

  2. 在创建新轮询时向树中添加轮询条目,例如使用信号和模型的API。如您所见,它与选项1相同,但是自动化;

  3. 不要在菜单和sitetree中显示“轮询{{poll.question}”,但只能在面包屑中显示。因此,考虑通过民意调查列表导航的“民意调查”页面。如果是面包屑,“轮询{{poll.question}”将根据给定的规则在游泳池页面上解析为完整标题。


  4. 对于 hardyharzen ,谁在评论中询问第2号的例子:

    假设我们仍在谈论民意调查。将以下代码放在polls app models.py文件中。

    请注意,此代码将树项添加到ID为1的站点树中,位于id为10的树分支处,并期望Poll模型定义了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)