创建公共职能'在Django中/从模板标签中的当前模板访问模型数据

时间:2014-06-11 06:31:11

标签: python django django-models django-templates

我正在学习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

如果有帮助

1 个答案:

答案 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 %}