使用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配置了index
和detail
这样的视图:
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 %}
来处理参数。遗憾的是,除了上面提到的答案的一些副本之外,网上没有什么有用的东西。如果有人帮我解决了一个更详细的问题,我将不胜感激。谢谢你的帮助!
答案 0 :(得分:1)
目前该应用程序无法满足您的期望,即它无法确定您通过“轮询{{poll.question}”描述了多少次民意调查,以及您希望显示哪些民意调查?在菜单中。
我应该尝试考虑这个功能,但坦率地说,我不会考虑在菜单中放置数十个民意调查。
尽管如此,有几种方法可以应对它:
为您需要手动创建每个投票的条目;
在创建新轮询时向树中添加轮询条目,例如使用信号和模型的API。如您所见,它与选项1相同,但是自动化;
不要在菜单和sitetree中显示“轮询{{poll.question}”,但只能在面包屑中显示。因此,考虑通过民意调查列表导航的“民意调查”页面。如果是面包屑,“轮询{{poll.question}”将根据给定的规则在游泳池页面上解析为完整标题。
对于 hardyharzen ,谁在评论中询问第2号的例子:
您可以在https://docs.djangoproject.com/en/1.3/topics/signals/阅读有关信号的信息。
我们将使用的Django内置信号在https://docs.djangoproject.com/en/1.3/ref/signals/中有描述。
假设我们仍在谈论民意调查。将以下代码放在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)