Как вернуть наборы запросов и словари - PullRequest
2 голосов
/ 01 мая 2019

Я пытаюсь передать набор запросов и словарь, контекст - это набор запросов, и для этого примера unassigned_samples2 - словарь, в моем шаблоне я могу либо отобразить словарь, либо набор запросов, но не оба, это зависит от того, Я включаю контекстный набор запросов. Есть идеи, как заставить это работать?

def detailcontainer(request, container_id):
    container = get_object_or_404(Container, pk=container_id)
    samples = container.samples.all()
    container_contents = container.samples.all()
    unassigned_samples = Sample.objects.all()[:10]
    unassigned_samples2 = Sample.objects.all()

    qs = Sample.objects.all()
    easting_query = request.GET.get('area_easting')
    northing_query = request.GET.get('area_northing')
    context_query = request.GET.get('context_number')
    sample_number_query = request.GET.get('sample_number')
    sample_type_query = request.GET.get('sample_type')

    if easting_query != '' and easting_query is not None:
        qs = qs.filter(area_easting__icontains=easting_query)
    if northing_query != '' and northing_query is not None:
        qs = qs.filter(area_northing__icontains=northing_query)
    if context_query != '' and context_query is not None:
        qs = qs.filter(context_number__icontains=context_query)
    if sample_number_query != '' and sample_number_query is not None:
        qs = qs.filter(sample_number__icontains=sample_number_query)
    if sample_type_query != '' and sample_type_query is not None:
        qs = qs.filter(sample_type__icontains=sample_type_query)

    qs = qs

    context = {
        'queryset': qs
    }
    return render(request, 'container/detailcontainer.html', context,
    {'container':container,
    'container_contents': container_contents,
    'unassigned_samples': unassigned_samples,
    })

Ответы [ 2 ]

1 голос
/ 01 мая 2019

В зависимости от версии django, вы можете проверить https://docs.djangoproject.com/en/2.2/topics/http/shortcuts/ (выберите конкретную версию в правом нижнем углу страницы) для подписи функции render () .

Подпись функции render () : render(request, template_name, context=None, content_type=None, status=None, using=None).

Как видите, третий параметр - context (словарь, содержащий ключи, которые используются в качестве переменных контекста temaplate в шаблоне django).

Просто изменить

context = {
    'queryset': qs
}

return render(request, 'container/detailcontainer.html', context,
{'container':container,
'container_contents': container_contents,
'unassigned_samples': unassigned_samples,
})

до

context = {
    'queryset': qs
    'container': container,
    'container_contents': container_contents,
    'unassigned_samples': unassigned_samples
}

return render(request, 'container/detailcontainer.html', context)

Наконец, в вашем шаблоне вы можете получить доступ ко всем определенным переменным контекста шаблона, таким как queryset, container и т. Д.

, например

  • {% for sample in queryset %} {{sample.pk}} {% endfor %}

  • {% for item in unassigned_samples %} {{item.pk}} {% endfor %}

0 голосов
/ 01 мая 2019

Не могли бы вы добавить: {'container':container, 'container_contents': container_contents, 'unassigned_samples': unassigned_samples, }

в свой контекстный словарь?В контекстном словаре может быть много объектов.

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