Django-简单的自定义模板标签示例

我有用户,视频,主题,标准和评分

  • 一个视频有一个话题
  • 一个主题有规定-
  • 一个用户可以创建一个视频对于一个给定话题
  • 一个用户可以评价一个视频上的每个指标分析为有关给出的话题。

    你可以查看我的原始文章Django-Rating Model Example DetailView Template以获取有关所使用模型的详细信息

我已经扩展了DetailView基于视频模型的模板,以将给定用户的所选视频的评级列表作为额外的上下文。

class VideoFileDetailView(DetailView):

model = VideoFile

def get_context_data(self, **kwargs):

context = super(VideoFileDetailView, self).get_context_data(**kwargs)

context['rates'] = VideoRate.objects.filter(video=self.object, user=self.request.user)

return context

在被指向的模板DetailView,我想列出指标分析中的视频,并为每个标准显示当前额定值形式的用户。

<div id="rating">

<ul>

{% for crit in videofile.topic.crits.all %}

<li>

{% for rate in rates %}

{% if rate.crit.id == crit.id %}

{{ rate.rate }}

{% endif %}

{% endfor %}

<div class="rateit"

data-rateit-value="{# The rating value #}"

data-rateit-ispreset="true"

crit-id="{{ crit.id }}"></div>

{{ crit }}

</li>

{% endfor %}

</ul>

</div>

(rateit是一个jquery插件,我用来绘制漂亮的星星评级控件)

实际上,我在2号之内就获得了我的评分值,for但是我敢肯定有更好的方法可以做到这一点。实际上,我仍然不确定模型的正确性。

最后,我想用{# The rating value #}当前暴击率(在循环中)的额定值代替。我怎样才能做到这一点 ?

回答:

这是我的解决方案(基于自定义标签):

首先创建文件结构。进入需要标签的应用目录,并添加以下文件:

templatetags

templatetags/__init__.py

templatetags/video_tags.py

该templatetags / video_tags.py文件:

from django import template

register = template.Library()

@register.simple_tag

def get_rate(crit, rates):

return rates.get(crit=crit).rate

模板部分,带有我们的标记调用:

{% load video_tags %}

<div id="rating">

<ul>

{% for crit in videofile.topic.crits.all %}

<li>

<div class="rateit"

data-rateit-value="{% get_rate crit rates %}"

data-rateit-ispreset="true"

crit-id="{{ crit.id }}"></div>

{{ crit }}

</li>

{% endfor %}

</ul>

</div>

以上是 Django-简单的自定义模板标签示例 的全部内容, 来源链接: utcz.com/qa/420710.html

回到顶部