Почему передача аргументов в родительский шаблон делает дочерний шаблон не в состоянии их использовать - PullRequest
0 голосов
/ 27 марта 2019

я делаю проект django для школьного сайта

У меня есть base.html, который действует как родительский шаблон для дочерних шаблонов, который является содержимым каждой страницы

Base.html включает в себянавигационная панель с логотипом школы и разделом под названием «Единицы»

- это код для отображения страницы лектора

views.py..

def lecturer_home(request):
    user = request.user

        query for the user first name and full name
        query for the units that the user is teaching and their teaching 
        period in unit_list and period_display


        class_display = zip(unit_list, period_display)
        user_dict = {
        'f_name' : user.first_name,
        'fl_name' : user.first_name + ' ' + user.last_name,
        'class_display' : class_display,
        }
        return render(request, 'Lecturer/lecturerdashboard.html', user_dict)
    else:
        return HttpResponse('Unexpected error')

lecturerdashboard.html расширяет base.html

Я добавил меньше кода для моего views.py, потому что я не думаю, что допустил какие-либо ошибки.Я хочу подтвердить, что все, что я передал user_dict в lecturerdashboard.html, также можно использовать в base.html, но я смущаюсь, что если ключ и значение используются в одном из них, другой не может его использовать,например, я могу отображать единицы измерения в разделе содержимого в файле lecturerdashboard.html, но когда я использовал class_display в файле base.html для отображения единиц измерения в качестве выпадающего меню, когда лектор нажимает «Единицы измерения», раздел содержимого не будет работать, посколькуон не понимает class_display.извините, если в общем вопрос сбивает с толку, родитель и потомок понимают аргумент, переданный представлением, но если ключ, значение используется в parent, потомок не понимает его, я просто хочу подтвердить, правда ли это?спасибо

Ответы [ 2 ]

0 голосов
/ 27 марта 2019

Это на самом деле не имеет ничего общего с шаблонами.zip - итератор.После того, как вы выполните итерацию, он исчерпан и больше не может быть использован.Если вы хотите повторить его несколько раз, назовите list на нем:

 class_display = list(zip(unit_list, period_display))
0 голосов
/ 27 марта 2019

Не знаю, ясно ли я понял: Вы хотите иметь доступ к некоторым переменным, таким как class_display в каждом шаблоне? Если так, то лучшим решением для этого является использование контекстных процессоров. Пример:

  1. Создайте файл в вашем приложении, например context_processors.py
from users.models import UserMessage


def notifications(request):
    if not request.user.is_anonymous:
        notifications = UserMessage.objects.filter(
            receiver=request.user, read=False)

        ctx = {
            "notifications": notifications,
            "notifications_number": notifications.count()
        }
        return ctx
    return {}
  1. В settings.py в ШАБЛОНЫ -> 'context_processors' add:
TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [os.path.join(BASE_DIR, "templates")],
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
                'app_name.context_processors.notifications' # added this!
            ],
        },
    },
]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...