Я пытался создать примерную страницу пользователей, где я хочу показать имя пользователя, пароль и роль пользователей. Я буду хранить роль в виде чисел, а позже я попытаюсь получить имя роли из списка.
Я жестко закодировал имена этих ролей в список roles = ['admin', 'teacher', 'student']
эти роли были переданы на html-страницу как значение контекста. Кроме того, я передаю переменную num для доступа к элементам списка (atm ее значение также жестко запрограммировано, я изменю это в будущем)
def index(request):
roles = ['admin', 'teacher', 'student']
num=1
return render(request=request, template_name='show_all.html', context = {'roles': roles, 'num': num})
и внутри моей html-страницы я пытаюсь получить доступ к этому списку, используя переменную num
, как указано ниже.
{{roles[num]}}
TemplateSyntaxError в /show_all
Не удалось разобрать остаток: «[число]» из «ролей [число]».
есть несколько решений, которые говорят, что roles.0
даст вам первый результат, а roles.1
даст следующий, но я не хочу жестко кодировать там индекс.
asgiref==3.5.2
Django==4.1.3
sqlparse==0.4.3
tzdata==2022.6
я пытался
{{roles.num}}
{{roles.get(num)}}
{{roles[num]}}
ничего не дает мне желаемого результата.
@ilyasbbu это именно то, что я предложил в своем решении.
это будет работать здесь, но у меня есть некоторые планы реализовать это с помощью list. Таким образом, переменная num будет изменена на список. поэтому здесь необходимо что-то похожее на это решение, например, какие-то методы jinja или что-то, что работает внутри jinja. stackoverflow.com/questions/57149694/…
Лучший подход:
def roli(roles, i):
"""Return the rol[i]"""
return roles[i]
В Джиндже:
{{ roles|roli:i }}
Я бы порекомендовал вам прочитать документацию о tags
: https://docs.djangoproject.com/en/4.1/howto/custom-template-tags/ вам нужны дополнительные шаги для регистрации тега шаблона.
Другой подход. Обходной путь может быть следующим:
def index(request):
roles = ['admin', 'teacher', 'student']
num=1
return render(request=request, template_name='show_all.html', context = {'roles': roles, 'num': num, 'rolesi': roles[num]})
А потом: show_all.html
{{rolesi}}
Да сработает. Но на самом деле я не хочу менять там код Python. Вместо этого я хотел иметь это в шаблоне jinja. Есть ли способ сделать это?
В моем случае я буду реализовывать базу данных. И будет хранить роли пользователей в таблице вместе с некоторыми другими полями. Так что окончательные данные (принимая только роли в качестве списка) будут выглядеть как model_roles=[1,2,1,3], я проведу цикл по этому списку и на основе текущего индекса я буду печатать там имя_роли. Пробовали поставить условие if в jinja. Но это может быть не масштабируемо. Поэтому я просто хотел получить что-то масштабируемое 😃
@ Harikrishnan.AS- просмотрите обновленный ответ ...
Да, это сработало. Большое спасибо, также, как вы упомянули в ответе, я должен был просмотреть, настроив Custom template tags and filters
. Большое спасибо за изучение этого вопроса.
Почему бы не проиндексировать само представление и не перейти к jinja