【发布时间】:2011-09-21 00:47:38
【问题描述】:
我有用户、视频、主题、标准和评分
- 一个视频有一个主题
- 一个主题有标准
- 用户可以为给定的主题创建视频
- 用户可以根据为相关主题给出的每个标准对视频进行评分。
您可以查看我的原始帖子Django - Rating Model Example DetailView Template 以获取有关所用模型的详细信息
我已经扩展了一个基于 video 模型的 DetailView 模板,以放置给定 video 的 ratings 列表user 作为额外的上下文。
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指向的模板中,我想列出video的criterias,以及每个criteria从用户显示当前评分值。
<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 插件,我用它来绘制漂亮的星星评级控件)
实际上,我在第二个for 内得到了我的评分值,但我确信有更好的方法来做到这一点。事实上,我仍然不确定我的model 是否正确。
最后我想用当前暴击率的评级值替换{# The rating value #}(在循环中)。我该怎么做?
【问题讨论】:
-
如果你在模型上添加帮助属性来为你做一些事情,你可以简化你的模板代码,例如循环速率。
-
其实最好是作为模板标签。传入
rates和crit,返回rates.filter(crit=crit)
标签: django django-models django-templates