Django -> шаблон диктовки доступа из функции context_proccesor - PullRequest
0 голосов
/ 03 апреля 2019

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 показывает -> «Нет сена»

¿В чем моя ошибка?¿Что я могу сделать, чтобы использовать dict?

Ответы [ 2 ]

0 голосов
/ 03 апреля 2019

Все ключи из вашего контекстного процессора добавляются в контекст шаблона. Сам словарь не добавляется в контекст.

Если вы хотите сделать {% 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 %}
0 голосов
/ 03 апреля 2019

Вам нужно передать его в контексте представления, чтобы шаблон мог получить к нему доступ. Примерно так:

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/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...