我有用户,视频,主题,标准和评分
我已经扩展了DetailView基于视频模型的模板,以将给定用户的所选视频的评级列表作为额外的上下文。
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但是我敢肯定有更好的方法可以做到这一点。实际上,我仍然不确定模型的正确性。
for
最后,我想用{# The rating value #}当前暴击率(在循环中)的额定值代替。我怎样才能做到这一点 ?
{# 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>