Django context

Domohod45

Новичок
Пользователь
Дек 7, 2021
68
3
8
Мне нужно использовать context для одного шаблона в другом.
Я использую библиотеку для комментариев, из которой я скачал шаблоны для их изменения, и в одном из них мне нужно использовать переменные из context'a. Проблема в том, что для них нет view, поэтому передать context к шаблонам библиотеки не получится. Как я могу это исправить? Могу ли использовать context одной вью для другого шаблона тоже?
 

stud_55

Модератор
Команда форума
Модератор
Апр 3, 2020
1 522
672
113
Пожалуй так нельзя ввести переменную с объектом из models.

меняю строку 326:
context_dict['comments', 'word'] = comments, "word"
После чего шаблон comment_tree.html перестает работать(ничего не показывает). Переменную в шаблон я добавил.
Во первых в контекст можно добавлять переменные в своей вьюхе, а не в классе RenderXtdCommentTreeNode.
Во вторых вы неправильно добавляете переменную в словарь: нужно добавлять так словарь[ключ] = значение, а у вас получилось что вы добавили по составному ключу 'comments', 'word' значение comments, "word", а ключа comments в словаре больше не стало, вот и получилась ошибка при обращении к нему.
Когда я говорил добавить переменную в контекст это значит добавить ее во вьюхе:
Python:
def view1(request):
    ...
    x = 5
    return render(request, 'template.html', {'comment': value, 'x': x}
а в шаблоне ее можно comment_tree.html вывести так:
HTML:
<p>{{x}}</p>
Контекст одинаковый так что это сработает (я проверял если что).
 
  • Мне нравится
Реакции: Domohod45

stud_55

Модератор
Команда форума
Модератор
Апр 3, 2020
1 522
672
113
Мне нужно использовать context для одного шаблона в другом.
В context`e вы передаете переменные в шаблон, потом используйте их в шаблоне. Не понятно что вы имеете ввиду под использованием в другом шаблоне, так как для одной вьюхи один шаблон (возможно вопрос про вложенные шаблоны). Нужен пример вьюхи, контекста и шаблона (шаблонов).
Проблема в том, что для них нет view
Вьюхи есть - их можно найти в исходном коде библиотеки (env/lib/site-packages/django_comments_xtd/views.py, где env это имя папки виртуального окружения в которое установлена библиотека.
Я использую библиотеку для комментариев, из которой я скачал шаблоны для их изменения
В этой библиотеке в шаблонах используются шаблонные теги (template tags) для рендеринга списка комментариев и формы. Возможно вы пытаетесь передать что-то в них дополнительно (для того чтобы это сработало нужно их переделать, но возможно проще будет их не использовать).
Эти теги также можно посмотреть в коде библиотеки (env/lib/site-packages/django_comments_xtd/templatetags/comments_xtd.py)
 
  • Мне нравится
Реакции: Domohod45

Domohod45

Новичок
Пользователь
Дек 7, 2021
68
3
8
Не понятно что вы имеете ввиду под использованием в другом шаблоне, так как для одной вьюхи один шаблон (возможно вопрос про вложенные шаблоны). Нужен пример вьюхи, контекста и шаблона (шаблонов).
у меня есть, переменная, содержащая объект модели(value, created = Choose.objects.get_or_create(voter=request.user)) и ее нужно передать в шаблон библиотеки(comment_tree.html).
Я не смог найти на github view, где используется comment_tree.html
 
Последнее редактирование:

stud_55

Модератор
Команда форума
Модератор
Апр 3, 2020
1 522
672
113
Я не смог найти на github view, где используется comment_tree.html
Я выше писал про шаблонные теги. Шаблон comment_tree.html используется в теге render_xtdcomment_tree, код которого можно посмотреть по ссылке. В случае успеха тег возвращает экземпляр класса RenderXtdCommentTreeNode (код).
В одном из ваших прошлых вопросов вы выводили дерево комментариев в шаблоне с помощью данного тега:
Python:
{% render_xtdcomment_tree for comment allow_flagging allow_feedback show_feedback %}
Для переменной value можно попробовать сделать также:
- передать ее в шаблон render(request, 'template.html', {'comment': value}
- вывести на экран с помощью тега
Python:
{% render_xtdcomment_tree for comment allow_flagging allow_feedback show_feedback %}
 
  • Мне нравится
Реакции: Domohod45

Domohod45

Новичок
Пользователь
Дек 7, 2021
68
3
8
В случае успеха тег возвращает экземпляр класса RenderXtdCommentTreeNode (код).
Могу ли я его скопировать в свой проект, чтобы ввести в него нужные мне переменные?
Для переменной value можно попробовать сделать также:
- передать ее в шаблон render(request, 'template.html', {'comment': value}
- вывести на экран с помощью тега
Python:
{% render_xtdcomment_tree for comment allow_flagging allow_feedback show_feedback %}
Это мой шаблон страницы, где показываются комментарии.
 

stud_55

Модератор
Команда форума
Модератор
Апр 3, 2020
1 522
672
113
Могу ли я его скопировать в свой проект, чтобы ввести в него нужные мне переменные?
Конечно можете. Он и так присутствует у вас в проекте при установке библиотеки и экземпляр этого класса создается при использовании тега.
Это мой шаблон страницы, где показываются комментарии.
Если все работает тогда не понятно в чем был первоначальный вопрос.
 
  • Мне нравится
Реакции: Domohod45

Domohod45

Новичок
Пользователь
Дек 7, 2021
68
3
8
Конечно можете. Он и так присутствует у вас в проекте при установке библиотеки и экземпляр этого класса создается при использовании тега.
Он должен располагаться в виртуальной среде? Я не смог там найти мои модули.
Изменено: Я ее не активировал, вот и не показывались модули(только сейчас уставил среду, т.к не видел особой необходимости в ней).
Если все работает тогда не понятно в чем был первоначальный вопрос.
Мне нужно было сделать проверку в файле comment_tree.html, чтобы было ограничение для непроголосовавших пользователей. Для этого мне нужно передать в этот шаблон context с value. Не имея(у себя) view для этого шаблона, я предположил, что можно как-то использовать context с других view.
 
Последнее редактирование:

stud_55

Модератор
Команда форума
Модератор
Апр 3, 2020
1 522
672
113
Он должен располагаться в виртуальной среде? Я не смог там найти мои модули.
Изменено: Я ее не активировал, вот и не показывались модули(только сейчас уставил среду, т.к не видел особой необходимости в ней).
Если виртуальная среда не используется, то код будет в папке папка_куда_установлен_питон/Lib/site-packages/django_comments_xtd/templatetags/comments_xtd.py.
 
  • Мне нравится
Реакции: Domohod45

Domohod45

Новичок
Пользователь
Дек 7, 2021
68
3
8
Могу ли я его скопировать в свой проект, чтобы ввести в него нужные мне переменные?
Я забыл про то, что это отдельный проект, значит и ввести в этот класс переменную с содержимым из models(добавить value в context)не получится... Что делать?
 

stud_55

Модератор
Команда форума
Модератор
Апр 3, 2020
1 522
672
113
Я забыл про то, что это отдельный проект, значит и ввести в этот класс переменную с содержимым из models(добавить value в context)не получится... Что делать?
Тут для всех вложенных шаблонов контекст одинаковый. В классе RenderXtdCommentTreeNode в методе render контекст добавляется в переменную context_dict, потом в нее помещается дерево комментариев и далее эта переменная передается в шаблон comment_tree.html.
Проверить это можно элементарно добавьте в контекст любую переменную и попробуйте вывести ее в шаблоне comment_tree.html.
Шаблон для этого нужно будет изменить (добавить вывод переменной {{имя_переменной}}).
 
  • Мне нравится
Реакции: Domohod45

Domohod45

Новичок
Пользователь
Дек 7, 2021
68
3
8
Тут для всех вложенных шаблонов контекст одинаковый. В классе RenderXtdCommentTreeNode в методе render контекст добавляется в переменную context_dict, потом в нее помещается дерево комментариев и далее эта переменная передается в шаблон comment_tree.html.
Проверить это можно элементарно добавьте в контекст любую переменную и попробуйте вывести ее в шаблоне comment_tree.html.
Шаблон для этого нужно будет изменить (добавить вывод переменной {{имя_переменной}}).
Пожалуй так нельзя ввести переменную с объектом из models.

меняю строку 326:
context_dict['comments', 'word'] = comments, "word"
После чего шаблон comment_tree.html перестает работать(ничего не показывает). Переменную в шаблон я добавил.
 

Domohod45

Новичок
Пользователь
Дек 7, 2021
68
3
8
Когда я говорил добавить переменную в контекст это значит добавить ее во вьюхе:
Python:
def view1(request):
    ...
    x = 5
    return render(request, 'template.html', {'comment': value, 'x': x}
а в шаблоне ее можно comment_tree.html вывести так:
HTML:
<p>{{x}}</p>
Контекст одинаковый так что это сработает (я проверял если что).
Вот оно... спасение. Благодарю вас.
 

Форум IT Специалистов