【发布时间】:2021-02-28 01:58:45
【问题描述】:
在 django 模板中调用非 Django 类的方法时遇到问题。
我尝试过将其作为属性调用并创建自定义过滤器,但我都无法返回任何内容。
抱歉,如果这很明显,但我并不精通 Django,而且我似乎在他们的文档中找不到任何非 Django 模型类的参考
我有一堂课
class MarketDataSet():
def __init__(self, market_data):
self.market_data = market_data
def filter_data(self, side):
filtered = list()
for dp in self.market_data:
if dp.side == side:
filtered.append(dp)
return filtered
def bids(self):
return self.filter_data(side='bid')
def asks(self):
return self.filter_data(side='bid')
def trades(self):
return self.filter_data(side='trade')
def high_bid(self):
amounts = list()
if not self.bids():
return ''
else:
for bid in self.bids():
amounts.append(bid.amount)
return max(amounts)
def low_ask(self):
amounts = list()
if not self.asks():
return ''
else:
for ask in self.asks():
amounts.append(ask.amount)
return max(amounts)
def average_trade(self):
amounts = list()
if not self.trades():
return ''
else:
for trade in self.trades():
amounts.append(trade.amount)
return statistics.mean(amounts)
和views.py(相关部分):
if form.is_valid():
style_id = form.get_style().upper()
stats = dict()
st_data = MarketDataSet(market_data=get_full_market_data(style_id=style_id, size=None))
stats.update({'st': st_data})
return render(request=request,
template_name='main/pricer_response.html',
context={'form': form,
'stats': stats,
})
和 pricer_response.html 模板(相关部分)注意这两种方法:
{% for platform in stats.keys %}
{% block content %}
{% load static %}
<tr>
<td><b>{{platform.title}}</b></td>
<td>{{stats.platform|get_method:high_bid}}</td>
<td>{{stats.platform.low_ask}}</td>
{% endfor %}
{% endblock %}
和 custom_tags.py:
@register.filter(name='get_method')
def get_method(obj, method_name):
return getattr(obj, method_name)
【问题讨论】:
-
也许你想将
stats['st']传递为stats键值(而不是stats)虽然我仍然不知道platform属性来自哪里。
标签: python django class django-templates django-filters