gpt4 book ai didi

python - Django 模板标签 forloop

转载 作者:行者123 更新时间:2023-11-28 16:37:16 24 4
gpt4 key购买 nike

我创建了一个模板标签并尝试循环遍历模板标签的结果但我没有得到任何结果

标签.py

from django import template
from loadprograms import dbcontext

register = template.Library()


@register.simple_tag
def get_category():
x = dbcontext.DBContext()
results = x.executequery("Select name from Categories")
categories = [each[0] for each in results]
return categories

模板代码

{% load category_tags %}
{% get_category %}
{% for each in get_category %}
{{ each }}
{% endfor %}

{% get_category %} 打印所有类别没有任何问题,但 for 循环 stmt循环遍历结果不起作用

可能是什么问题?

最佳答案

要在您的标签中进行此更改,您必须 set a variable in the context , 但是如果你的目标是在模板中有一个可用的类别列表,就像你从 View 中传递它一样 - 那么你需要写一个 template context processor ,这将允许所有 View 在其上下文中拥有此变量。

模板上下文处理器只是一种通过返回字典添加到请求上下文的方法。可以把它想象成一个 View 函数,它只返回一个上下文。

from .models import Categories

def cat_names(request):
return {'category_names': Category.objects.values_list('name', flat=True)}

要激活这个上下文处理器,你必须做几件事:

  1. 将上述代码添加到一个名为 template_processors.py 的文件中,该文件与您的 models.pyviews.py 位于同一位置>.

  2. 在您的settings.py 中,将方法 的完全限定名称添加到TEMPLATE_CONTEXT_PROCESSORS设置,确保您没有覆盖默认值。要轻松地做到这一点,首先导入默认设置,然后添加到它:

    from django.conf.default_settings import TEMPLATE_CONTEXT_PROCESSORS as TCP

    TEMPLATE_CONTEXT_PROCESSORS = TCP + ('yourapp.template_processors.cat_names',)
  3. 使用 render shortcut ,这将确保正确传递上下文。

在您看来,您现在可以这样做:

from django.shortcuts import render

def home(request):
return render(request, 'home.html')

在您的 home.html 中,您现在可以:

{% for name in category_names %}
{{ name }}
{% endfor %}

关于python - Django 模板标签 forloop,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24355399/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com