我是 Django 的新手,我正在尝试自己建立一个博客。我正在尝试使用 nodequeue 创建一个在 Drupal 中实现的功能模块。
我想做的是能够创建对象队列,例如,博客文章队列。下面,我描述了我想象中的队列是如何工作的:
- 每个队列的大小应该是用户定义的。
- 应记录对象添加到队列的日期。
- 我希望能够定义属于每个队列的项目的顺序(但我认为这会非常困难)。
- 如果队列已满,添加一个额外的项目应该丢弃队列中最旧的项目。
创建精选帖子队列是此类功能如何发挥作用的一个示例。
我目前的知识不允许我弄清楚什么是正确的方法。如有任何指点,我将不胜感激。
提前致谢
最佳答案
这是一种方法:
import collections, datetime, itertools
class nodequeue(object):
def __init__(self, N):
self.data = collections.deque(N * [(None, None)])
def add(self, anobj):
self.data.popleft()
self.data.push((anobj, datetime.datetime.now())
def __iter__(self):
it = iter(self.data)
return it.dropwhile(lambda x: x[1] is None, self.data)
这忽略了“排序”的要求,但这并不难添加,例如:
class nodequeueprio(object):
def __init__(self, N):
self.data = collections.deque(N * [(None, None, None)])
def add(self, anobj, prio):
self.data.popleft()
self.data.push((anobj, datetime.datetime.now(), prio)
def __iter__(self):
it = iter(self.data)
return sorted(it.dropwhile(lambda x: x[1] is None, self.data),
key=operator.itemgetter(2))
我认为用占位符 None
预填充队列可以简化代码,因为 add
总是可以在添加新东西之前删除最左边(最旧或无)的项目 --即使 __iter__
然后必须删除占位符,这也不算太糟糕。
关于python - 如何在 Django 中创建对象队列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1664952/