Невозможно отобразить список в шаблоне из представления django - PullRequest
0 голосов
/ 02 октября 2019

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

представление:

from django.shortcuts import render
from haleys_chemist.models import anti_bacterials
from django.http import HttpResponse
from .table import anti_bacterials_Table
from django_tables2 import RequestConfig
from datetime import datetime
from django.http import HttpResponseRedirect
from .forms import notepadform
from django.contrib.auth.decorators import login_required 
from django.views.generic import TemplateView,ListView


class retriever(TemplateView):
    template_name='index.html'
    def expiry_days(self,request):
        expired_drugs= anti_bacterials.objects.all()
        args={'expired_drugs':expired_drugs}
        return render (request, self.template_name,args)

template (index.html):

                              <h6><i>Drugs about to expire</i></h6>                                
                                {%for expired_drug in expired_drugs%}
                                <ul>
                                    <li>{{expired_drug.Drug_name}}</li>
                                    <li>{{expired_drug.expiry_date}}</li>
                                </ul>
                                {%endfor%}
                            </div>

модель:

class anti_bacterials(models.Model):
    Drug_id= models.IntegerField(primary_key=True);
    Drug_name= models.CharField(max_length=50);
    expiry_date= models.DateField();
    Price_per_mg= models.DecimalField(decimal_places=2, max_digits=20)

Мне нужно перечислить просроченные лекарства на левой панели. я знаю, что запросил все объекты в представлении, но все же я должен получить список всех имен объектов и дат истечения срока их действия.

1 Ответ

1 голос
/ 02 октября 2019

Вы не используете универсальный TemplateView правильно.

Метод expiry_days никогда не будет вызван, потому что универсальный TemplateView не знает об этом.

Просто вы можете использовать метод get_context_data для достижения того, что вы хотите:

class retriever(TemplateView):
    template_name='index.html'

    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        context['expired_drugs']= anti_bacterials.objects.all()
        return context

Подробнее о родовом TemplateView в официальной документации Django и здесь .

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