python - Wagtail:获取兄弟姐妹属性
问题描述
我正在创建投资组合应用程序。在内页上,我想给出一个链接到下一个投资组合记录的缩略图。
Wagtail:获取上一个或下一个兄弟姐妹- 这是有关如何获取 url 的答案。但它不适用于获取其他属性。
如果我在此方法中更改“url”:
def next_portfolio(self):
if self.get_next_sibling():
return self.get_next_sibling().url
else:
return self.get_siblings().first().url
获取不是“.url”而是“.thumbnail”
def next_portfolio(self):
if self.get_next_sibling():
return self.get_next_sibling().thumbnail
else:
return self.get_siblings().first().thumbnail
我得到的只是一个错误“'Page'对象没有属性'thumbnail'”。但它有。这就是我的模型的样子:
class PortfolioItem(Page):
thumbnail = models.ImageField(upload_to = '', default = None)
is_feautered = models.BooleanField(default=False)
def next_portfolio_thumb(self):
if self.get_next_sibling():
return self.get_next_sibling().thumbnail
else:
return self.get_siblings().first()
这应该是获得兄弟属性的明显方法。你能指点我怎么做吗?
解决方案
所以这个问题的答案如下。名为@gasman 的用户在这里回答:Wagtail单元测试:添加子页面会将它们转换为基本类型,以了解如何获取特定页面的属性。
为此,我们使用.specific
属性。
所以首先我通过以下方式打开了外壳:
python manage.py shell
在那里我导入了模型和我的模型:
>>> from django.db import models
>>> from portfolio import PortfolioItem
在我模拟了当前的投资组合项目后,调用它并获得了几个属性的结果
>>> page = PortfolioItem.objects.get(title = "Project title1")
>>> page
<PortfolioItem: Project title1>
>>> page.thumbnail
<ImageFieldFile: thumb1.png>
然后我创建了“next”的实例,我在其中调用了 Wagtail 的特殊get_next_sibling()
功能。如您所见,它本身不会返回记录的特定属性,而只会返回常见属性(请参阅顶部的链接)。但是使用specific
属性后,您可以从记录中获取所需的所有信息。
>>> next = page.get_next_sibling()
>>> next
<Page: Project title2>
>>> next.name
Traceback (most recent call last):
File "<console>", line 1, in <module>
AttributeError: 'Page' object has no attribute 'name'
>>> next.specific
<PortfolioItem: Project title2>
>>> next.specific.name
'Project name2'
所以在我的模型中,我创建了新功能:
def next_port(self):
if self.get_next_sibling():
return self.get_next_sibling()
else:
return self.get_siblings().first()
在模板中我以这种方式使用它:
<img src="/media/{{ self.next_port.specific.thumbnail }}">
如果您有更优雅的方式来做同样的事情,请告诉我。
推荐阅读
- google-cloud-platform - 如何在气流命令行上创建谷歌云平台连接?
- c# - 如何翻译基于鼠标拖动的旋转脚本以使用触摸输入?
- javascript - 推送通知未定义的“showNotification”
- primefaces - 如何默认设置 xhtml 面板切换?
- ios - 使用 Swift 从 HealthKit 获取过去 30 天的 bodyMass 数据
- algorithm - 并行化 A* 以进行昂贵的成本计算
- vba - 如何在 VBA 中使用 Http-request 设置 cookie?
- sql-server - Windows API 调用“RegGetValueW”返回错误代码:0
- python - 在 python 中绘制时间图
- windows - 有没有办法缩短 connect_ex() 的超时时间?