我正在学习Django,我正在将一个网站从Laravel转换为Django,以帮助我学习。
在Laravel中,我有一个代码片段:
public function attr_profile($label)
{
$attr = space_to_underscore($label);
if ($this->$attr >= 90) {
echo '<li>'.$label.'<span class="pull-right label label-highest">'.$this->$attr.'</span></li>';
} elseif ($this->$attr < 90 && $this->$attr >= 80) {
echo '<li>'.$label.'<span class="pull-right label label-high">'.$this->$attr.'</span></li>';
} elseif ($this->$attr < 80 && $this->$attr >= 65) {
echo '<li>'.$label.'<span class="pull-right label label-normal">'.$this->$attr.'</span></li>';
} elseif ($this->$attr < 65 && $this->$attr >= 65) {
echo '<li>'.$label.'<span class="pull-right label label-low">'.$this->$attr.'</span></li>';
} else {
echo '<li>'.$label.'<span class="pull-right label label-lowest">'.$this->$attr.'</span></li>';
}
}
让我使用:
{{ $player->attr_profile('Ball Control') }}
{{ $player->attr_profile('Curve') }}
在模板中它会吐出来:
<li>Ball Control<span class="pull-right label label-highest">95</span></li>
<li>Curve<span class="pull-right label label-high">88</span></li>
我试图以最干的方式在Django中重复相同的操作。我最接近的是创建一个自定义模板标签。
# Core imports
from django.template import Library
register = Library()
@register.simple_tag
def attr_profile(label):
attr = label.replace(" ", "_").lower()
return '<li>' + label + '<span class="pull-right label label-highest">' + attr + '</span></li>'
但理想情况下,我希望能够吐出“自我”。或者&#39; player.attr&#39;就像我如何使用&#39; $ this-&gt; attr&#39;在Laravel
我尝试过多次尝试,但每次都摔倒在脸上。模板标签是最好的方法,如果是这样,我如何在原始模板上使用现有模型?该模板来自:
class PlayerDetailView(DetailView):
# Define the model for the CBV
model = Player
如果有帮助
答案 0 :(得分:0)
您可以将include标记用于模板片段,并避免使用模板标记。
{% include "label_snippet.html" with label="Ball Control" score=object.ball_control %}
label_snippet.html
的内容可能是:
{% if score >= 90 %}
<li>{{ label }}<span class="pull-right label label-highest">{{ score }}</span></li>
{% elif score < 90 and score >= 80 %}
....
{% endif %}