当前位置: 首页 > 面试题库 >

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

狄冠宇
2023-03-14
问题内容

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

  • 一个视频有一个话题
  • 一个主题有规定-
  • 一个用户可以创建一个视频对于一个给定话题
  • 一个用户可以评价一个视频上的每个指标分析为有关给出的话题。
    你可以查看我的原始文章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>


 类似资料:
  • 问题内容: 我在中的代码: 在“ settings.py”中: 但我得到一个错误: 问题答案: 在该范围内不是变量。你必须首先从上下文中获取它。传递t给装饰器并添加context到tag参数。 像这样:

  • 虽然 Django 已经给我们提供了足够丰富的内置标签和过滤器,但实际开发中还是会遇到内置标签和过滤器无法满足的需求,此时 Django 还给我们提供了实现自定义模板标签和过滤器的方式。想要自定义模板标签和过滤器,必须按照如下的方式做好前面的准备工作。 我们在前面的第一个应用 (hello_app) 中添加自定义的标签和模板。首先完成如下两步: 必须新建一个名为 templatetags 的目录。

  • 本文向大家介绍ThinkPHP模板自定义标签使用方法,包括了ThinkPHP模板自定义标签使用方法的使用技巧和注意事项,需要的朋友参考一下 使用模板标签可以让网站前台开发更加快速和简单,使用过dedecms、phpcms等内容管理系统的人应该都知道,cms的前台都是使用模板标签来调用数据。以调用文章列表为例: dedecms可以写成: phpcms可以写成: ThinkPHP的自定义标签同样能够实

  • mytag|自定义宏标记: 标签名称:mytag 功能说明:用于获取自定义宏标记的内容 适用范围:全局使用 基本语法: {dede:mytag typeid='0' name=''/} 参数说明: name = ’’ 标记名称,该项是必须的属性,以下 2、3是可选属性; ismake = ’yes|no’ 默认是 no 表示设定的纯HTML代码, yes 表示含板块标记的代码; typeid =

  • 本文向大家介绍自定义一个异常类模板的简单实例,包括了自定义一个异常类模板的简单实例的使用技巧和注意事项,需要的朋友参考一下 一:自定义异常类: 二:写一个测试分数的方法类:这里面是抛出一个自己写的异常类 三:写一个测试分数,如果有异常,要捕获,不要抛出了 以上就是小编为大家带来的自定义一个异常类模板的简单实例全部内容了,希望大家多多支持呐喊教程~

  • 问题内容: 我想将AngularJS与Django一起使用,但是它们都用作模板标记。有没有一种简单的方法可以将两者之一更改为使用其他自定义模板标签? 问题答案: 对于Angular 1.0,你应该使用$ interpolateProvider api配置插值符号:http : //docs.angularjs.org/api/ng.$interpolateProvider。 这样的事情应该可以解决