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'
¿我的错误是什么? ¿我该怎么做才能使用字典?
答案 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 %}