outsider_x
@outsider_x
Изучаю Python

Где найти views для базового шаблона в Django?

Есть кусочек кода, который нужно запихнуть в шаблон Django. Я его по разному пробовал, но он не запихивается. Посоветуйте, как поступить:
{% Profile.objects.get(name__exact=request.user.get_username).get_absolute_url %}

Немного погуглив, я пришел к выводу, что лучше это делать отдельно в views.py. Но этот кусочек нужно вставить в самый базовый шаблон. Итак, второй вопрос: как использовать views для базовых шаблонов?
  • Вопрос задан
  • 269 просмотров
Решения вопроса 1
@776166
0) В базовый, не в базовый (наследующий базовый), это не важно. Важно то, как именно передать в шаблон. В базовый шаблон никакой контекст не передаётся. Базовый шаблон просто расширяет ваш шаблон, а контект там один.

1) В вашем случае НЕОБХОДИМО использовать штатный request.user и не парить себе мозг (https://docs.djangoproject.com/en/2.2/ref/request-...
Будет что-то типа {{ request.user.profile.get_absolute_url }}

UPD: Я не сразу углядел. У вас отедльная моделька для профиля, привязанная к пользователю.
Надо сделать в модели свойство, которое будет отдавать профиль для этого пользователя. Если сможете, то вопрос решен и будет работать как в примере выше. Если нет, то проще всего добавить context processor и отдавать переменную profile. Работать будет как-то так: {{ profile.get_absolute_url }}. Но лучше всего, конечно, определить в модели User свойство profile.

2) Если штатный request.user не подходит (почему!?), или вы хотите понять принцип на будущее, то есть два похожих варианта:
2.1) Передавать ваш объект в контекст конкретного шаблона из вьюхи. Будет работать только в этой вьюхе. Банально, да?
2.2) Написать context processor и добавить его в settings.TEMPLATES.OPTIONS.context_processors (см то, как это сделано в базовом settings.py и гугли примеры). Будет работать вообще везде в рамках рендера шаблонов. Мы не ищем лёгких путей для request.user!

Вадим Шаталов предлагает использовать фильтры/тэги. Это не совсем то (не совсем об этом), потому что в них всё равно надо будет или передавать request.user, или брать из контекста, куда его надо будет помещать одним из вышеописанных способов, или как-то его нечеловеческим образом откуда-то доставать, чего делать уже совсем не нужно.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
пока есть слова "нужно запихнуть" и "он не запихивается" нужно идти сюда. там вся правда про кусочки кода и как их впихивать и собственно куда
Ответ написан
Комментировать
netpastor
@netpastor
Python developer
Посмотри в сторону https://docs.djangoproject.com/en/2.2/howto/custom...
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы