如何在模板中手动通过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>
这是我的解决方案(基于自定义标签):
您正在寻找的是模板标签。进入产品应用目录添加以下文件:
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/
您无法将参数传递给模板中的函数。这是不允许的。
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>