Получение URL-адреса страницы внутри блока в Трясогузке

Используя Wagtail 2.9, я пытаюсь создать блок, который позволяет делиться своим текстовым содержимым с Twitter. Сам блок прост:

class QuotableShare(StructBlock):
    text = TextBlock(required=True)

    class Meta:
        icon = 'fa-twitter'
        template = 'blocks/quotable_share.html'

Однако я хотел бы иметь доступ к URL-адресу страницы, на которой отображается блок, чтобы включить его в качестве ссылки в сообщение для совместного использования. В шаблоне quotable_share.html я пробовал:

{{ request.get_full_path }}
{{ request.path }}
{{ request.full_path }}

Но никто не дал мне доступ к URL-адресу страницы.

Есть ли способ получить доступ к URL-адресу, не передавая его в качестве переменной шаблона при повторении блоков StreamField?


person Aquiles Carattino    schedule 08.05.2020    source источник


Ответы (1)


Из документации по рендерингу шаблонов — https://docs.wagtail.io/en/latest/topics/streamfield.html#template-rendering

Написание {{ my_block }} примерно эквивалентно {% include_block my_block %}, но краткая форма более ограничительна, так как она не передает переменные из вызывающего шаблона, такие как запрос или страница; по этой причине рекомендуется использовать его только для простых значений, которые не отображают собственный HTML.

Поэтому вам нужно будет обновить рендеринг блока в шаблоне страницы, чтобы использовать другой синтаксис. {% include_block my_block %}.

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

person LB Ben Johnston    schedule 08.05.2020
comment
Спасибо, я так и сделал, просто хотел узнать, есть ли более короткий путь, который помешал бы мне обновить все шаблоны, в которых я использую эти блоки. Возможно, я где-то упустил что-то очевидное, но, похоже, это не так. - person Aquiles Carattino; 08.05.2020
comment
Привет @AquilesCarattino - я еще раз просмотрел способ построения StreamField и Block и не вижу другого способа прочитать страницу (или модальную), частью которой является поле/блоки потока. Вы можете копаться в источнике здесь; github.com/wagtail/wagtail/blob/master/ трясогузка/ядро/блоки/ github.com/ трясогузка/трясогузка/blob/master/wagtail/core/fields.py - person LB Ben Johnston; 09.05.2020