Django - 简单的自定义模板标签示例 [英] Django - Simple custom template tag example

查看:94
本文介绍了Django - 简单的自定义模板标签示例的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

/ p>


  • A 视频有一个主题

  • 对于给定的主题

  • 可以对每个标准



您可以看到我的原始帖子 Django - 评估模型示例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)
返回上下文

DetailView ,我想列出视频标准,对于每个标准 em>显示用户中的当前评分值

  ; div id =rating> 
< ul>
{%for videofile.topic.crits.all%}
< li>
{%率率%}
{%if rate.crit.id == crit.id%}
{{rate.rate}}
{%endif%
{%endfor%}
< div class =rateit
data-rateit-value ={#评级值#}
data-rateit-ispreset =true
crit-id ={{crit.id}}>< / div>
{{crit}}
< / li>
{%endfor%}
< / ul>
< / div>

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



其实我得到我的评分值这里是第二个,但我确定有一个更好的方法来做到这一点。事实上,我仍然不能确定我的模型的正确性。 p>

最后,我想用当前暴击的评级值替换 {#评级值#} (在循环)。

解决方案

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



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

  templatetags 
templatetags / __ init__.py
templatetags / video_tags.py

templatetags / video_tags.py 文件:

 从django导入模板

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 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>


I have users, videos, topics, criterias and ratings

  • A video has a topic
  • A topic has criterias
  • A user can create a video for a given topic
  • A user can rate a video on each criterias given for the concerned topic.

You can see my original post Django - Rating Model Example DetailView Template to get details on the model used

I have extended a DetailView template based on the video model to put the list of ratings for the selected video for a given user as extra context.

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

In the template pointed by the DetailView, I'd like to list the criterias of the video, and for each criteria display the current rating value form the user.

<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 is a jquery plugin that I use to draw pretty stars rating controls)

Actually I get my rating values here within the 2nd for but I'm sure there is a better way to do that. In fact, I'm still not sure about my model correctness.

Finally I'd like to replace {# The rating value #} by the rating value from rate for the current crit (in the loop). How can I do that ?

解决方案

Here is my solution (based on a custom tag):

Firstly create the file structure. Go into the app directory where the tag is needed, and add these files:

templatetags
templatetags/__init__.py
templatetags/video_tags.py

The templatetags/video_tags.py file:

from django import template

register = template.Library()

@register.simple_tag
def get_rate(crit, rates):
    return rates.get(crit=crit).rate

The template part, with our tag call:

{% 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 - 简单的自定义模板标签示例的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆