Django-> context_proccesor函数中的dict访问模板

时间:2019-04-03 13:22:43

标签: django

Context_procesor

from .models import MdPaginas
def fn_mdpaginas(request):
    mdpaginas = dict()
    paginas = MdPaginas.objects.all()
    for pagina in paginas:
        mdpaginas[pagina.title] = pagina.id
    print('procesador de paginas ->', mdpaginas)
    return mdpaginas

打印在控制台上显示3个dict项目。 此模板代码如何失败:

{% for id, titulo in mdpaginas.items  %}
   <p>
     {{titulo}} hola
   </p>
{% empty %}
   No hay paginas  
{% endfor %}

HTML节目->'没有干草paginas'

¿我的错误是什么? ¿我该怎么做才能使用字典?

2 个答案:

答案 0 :(得分:0)

您需要在视图的上下文中传递它,模板才能访问它。像这样:

from django.shortcuts import render
from .models import MdPaginas

def fn_mdpaginas(request):
    paginas = MdPaginas.objects.all()
    context = {'mdpaginas': paginas}
    template_name = 'your_app/your_template.html'
    return render(request, template_name, context)

然后,您可以在模板中以以下方式访问它:

{% for pagina in mdpaginas  %}
   <p>
     {{pagina.titulo}} hola
   </p>
{% empty %}
   No hay paginas  
{% endfor %}

我建议您在这里看看,以更好地了解基于函数的视图:https://docs.djangoproject.com/en/2.1/topics/http/views/

答案 1 :(得分:0)

上下文处理器中的所有都添加到模板上下文中。字典本身不会添加到上下文中。

如果要在模板中执行{% for pagina in mdpaginas %},则需要返回包含mdpaginas的字典:

def fn_mdpaginas(request):
    mdpaginas = dict()
    paginas = MdPaginas.objects.all()
    for pagina in paginas:
        mdpaginas[pagina.id] = pagina.titulo  # Note I've reversed the key/values from your answer
    print('procesador de paginas ->', mdpaginas)
    out = {'mdpaginas': mdpaginas}
    return out

请注意,在上下文处理器中返回查询集可能更简单:

def fn_mdpaginas(request):
    return {'mdpaginas': MdPaginas.objects.all()}

您可以在模板中执行以下操作:

{% for mdpagina in mdpaginas %}
  <p>
    {{ mdpagina.titulo }}
  </p>
{% empty %}
  No hay paginas  
{% endfor %}