如何结合 Django 内置的“with”标签使用自定义模板标签?

Posted

技术标签:

【中文标题】如何结合 Django 内置的“with”标签使用自定义模板标签?【英文标题】:How to Use Custom Template Tag in Combination With Django's Built-in "with" Tag? 【发布时间】:2021-12-05 19:40:57 【问题描述】:

我有这个简单的标签:

myapp/templatetags/my_filters.py

@register.simple_tag
def get_bookmark_object(content_type, object_id):
    return Bookmark.objects.get(content_type=content_type, object_id=object_id)

在我的模板中,我希望能够做到这一点:

% load my_filters %

% with object as bookmark %
  % with bookmark_object=get_bookmark_object bookmark.content_type bookmark.object_id %
    % if bookmark.content_type.model == 'post' %
      % include 'content/post/object.html' with object=bookmark_object user_bookmark=bookmark %
    % elif bookmark.content_type.model == 'note' %
      % include 'content/note/object.html' with object=bookmark_object user_bookmark=bookmark %
    % endif %
  % endwith %
% endwith %

我得到错误:

TemplateSyntaxError at /my-page/
'with' received an invalid token: 'bookmark.content_type'

我的问题是:

如何在with 语句中使用我的自定义get_bookmark_object 模板标签?一个带有代码的示例将帮助我澄清很多。

参考: Django's with built-in

【问题讨论】:

【参考方案1】:

你定义的是一个模板标签,你可以用% … as … %标签给模板标签产生的值赋值:

% get_bookmark_object bookmark.content_type bookmark.object_id as bookmark_object %
    …

【讨论】:

谢谢!你是 100% 正确的。我想我不需要with

以上是关于如何结合 Django 内置的“with”标签使用自定义模板标签?的主要内容,如果未能解决你的问题,请参考以下文章

如何让内置标签“url”工作?

Django内置模板标签

Django---进阶9

Django---进阶9

遇到未知标签'with'

Django 内置模板标签和过滤器