从模板中的queryset获取对象名称

问题描述 投票:-6回答:2

如何在模板中手动通过id从queryset获取对象?

context_prose SSO RS.朋友

from products.models import Category


def cat_sidebar(request):
    sidebar_category = Category.objects.all()
    return {'cat_sidebar': sidebar_category}

模板

<h2 class="card-title text-white title">
    {{cat_sidebar.sub_category.get(id = 5).name}}
</h2>
django jinja2
2个回答
0
投票

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

您正在寻找的是模板标签。进入产品应用目录添加以下文件:

templatetags
templatetags/__init__.py
templatetags/tags.py

templatetags / tags.py文件:

from django import template

register = template.Library()

@register.simple_tag
def get_name(cat_sidebar, id):
    return cat_sidebar.get(id=id).name

模板部分,带有我们的标签调用:

{% load tags %}

<h2 class="card-title text-white title">
    {{get_name cat_sidebar 5}}
</h2>

有关更多信息,请参阅https://docs.djangoproject.com/en/2.1/howto/custom-template-tags/


0
投票

您无法将参数传递给模板中的函数。这是不允许的。

cat_sidebar.sub_category.get(id = 5).name

您可以在here中阅读模板标签,但我建议您在视图中执行此操作,然后使用上下文将其发送到模板,因为在视图中执行操作比在模板中操作更快。

模板标签解决方案

注意 - 只有你必须这样做而且我不建议这样做。

在项目中添加templatetags及其内容。

yourapp/
    __init__.py
    models.py
    templatetags/
        __init__.py
        mytags.py
    views.py

__init__.py可以为空。你的mytags.py文件会有这样的东西

from django import template
from ..models import Category  # Import Category here. Yours might differ

register = template.Library()


@register.simple_tag
def get_category_by_id(id):
    category = Category.objects.get(id=id)
    return category

现在模板看起来像这样

{% load mytags %}
{% get_category_by_id 5 %}

建议的解决方案:

视图看起来像这样。

def cat_sidebar(request):
    sidebar_category = Category.objects.all()
    category = Category.objects.get(id = 5)

    return {'cat_sidebar': sidebar_category, 'category': category}

模板变成了

<h2 class="card-title text-white title">
    {{ category.name }}
</h2>
© www.soinside.com 2019 - 2024. All rights reserved.