Django-Template:在标签块中获取变量!

Posted

技术标签:

【中文标题】Django-Template:在标签块中获取变量!【英文标题】:Django-Template : Get Variables in a Tag block ! 【发布时间】:2010-11-19 03:35:36 【问题描述】:

我需要检索一个保存在 DB 中的可选数字,到我制作的自定义模板标签中。要检索的对象是此图库中包含的变量(照片 ID)。在画廊循环中。

% get_latest_photo   photo.id  % 

如何做到这一点?!

P.s:我知道可以使用包含标签来完成,但目前如何让它修复这个!

编辑模板 html 文件:

% for album in albumslist %

    % get_latest_photo   photo.id  % 
    % for photo in recent_photos %
<img src='% thumbnail photo.image 200x80 crop,upscale %' alt=' photo.title ' />
    % endfor %
     album.title 
% endfor %

模板标签

from django.template import Library, Node
from akari.main.models import *
from django.db.models import get_model

register = Library()

class LatestPhotoNode(Node):
    def __init__(self, num):
        self.num = num
    def render(self, context):
        photo = Photo.objects.filter(akar=self.num)[:1]
        context['recent_photos'] = photo
        return ''

def get_latest_photo(parser, token):
    bits = token.contents.split()
    return LatestPhotoNode(bits[1])

get_latest_photo = register.tag(get_latest_photo)

P.s 当我将 album.id(在 % get_latest_photo photo.id % 中)替换为一个充当相册 ID 并从中检索照片的数字时,它的工作非常好。

问候 H.M.

【问题讨论】:

如果您告诉我们代码的异常行为,我们将更容易为您提供答案。 能贴出标签的代码吗? 【参考方案1】:

在模板标签中使用变量时,不要用括号括起来。

% get_latest_photo photo.id %

【讨论】:

在我添加括号之前尝试过,但根本没有用!【参考方案2】:

要正确评估 num 变量,我认为您应该像这样修改您的 LatestPhotoNode 类:

class LatestPhotoNode(Node):
    def __init__(self, num):
        self.num = template.Variable(num)

    def render(self, context):
        num = self.variable.resolve(self.num)
        photo = Photo.objects.filter(akar=num)[:1]
        context['recent_photos'] = photo
        return ''

【讨论】:

如何使用过滤值?比如% url_parameter tags=tag|slugify % self.variable 是什么?【参考方案3】:

你确定你的模板标签写得正确吗?比如需要使用Variable.resolve来正确获取变量的值:Passing Template Variables to the Tag

【讨论】:

你好 Ned,如何使用 Variable.resolve,我现在正在搜索,你能给我一个例子吗?! 只是一个经典的自定义模板标签,它将过滤照片并获取添加到此相册的最新照片。我编辑了主要问题。 嗯,很快就会做,但不知何故,我相信自定义模板标签不是问题,因为当我用数字替换 photo.id 并用相册过滤照片时,它工作得很好。身份证! 你好内德,我用这个codespatter.com/2009/01/22/how-to-write-django-template-tags修复了它。谢谢【参考方案4】:

我遇到了同样的问题,在reading the docs之后,我用这个解决了它

class LatestPhotoNode(Node):
    def __init__(self, num):
        self.num = template.Variable(num)

    def render(self, context):
        num = self.num.resolve(context)
        photo = Photo.objects.filter(akar=num)[:1]
        context['recent_photos'] = photo
        return ''

如果您尝试渲染多个变量,使用json.dumps 非常有用。

【讨论】:

以上是关于Django-Template:在标签块中获取变量!的主要内容,如果未能解决你的问题,请参考以下文章

django-template 中的不同模型

如何在脚本中使用 django-template 而不是 jinja2?

直接从 django-template 发送电子邮件

django-template层

VSCode 自定义代码格式和语言自动缩进(Django-Template 缩进)

在匿名块中使用变量来更改 SQL SEQUENCE 不起作用