【问题标题】:get object name from queryset in template从模板中的查询集中获取对象名称
【发布时间】:2019-07-23 06:33:15
【问题描述】:

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

context_prosessors.py

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


【解决方案1】:

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

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

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/

【讨论】:

    【解决方案2】:

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

    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>
    

    【讨论】:

      猜你喜欢
      • 2020-02-08
      • 2018-06-06
      • 2016-12-18
      • 2017-09-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多