Добавить ссылку в ячейку TableBlock
Я использую TableBlock в StreamField. Рендеринг страницы, включая таблицу, это хорошо. Но есть ли возможность разрешить пользователю вводить ссылку в ячейку таблицы? При простом добавлении URL он отображается как текст (как я и ожидал).
Требуется ли для этого пользовательский рендер?
3 ответа
Наша команда разработчиков контента также запросила эту функцию. Однако это не поддерживается в базовой библиотеке, которая TableBlock
использует. Мы закончили тем, что создали кастом StreamField
тип для отображения списков ссылок, вместо того, чтобы пытаться вставить ссылки в TableBlock
,
У меня тоже есть эта проблема. Я знаю, что эта проблема была опубликована давно, но я все равно решил поделиться своим решением. Я сдавался, но затем я попытался реализовать уценку вместо этого, как упоминал FlipperPA. И я понял, что после установки wagtail-markdown (пожалуйста, следуйте инструкциям), я могу настроить свой шаблон следующим образом:
<!-- added this at the top of my template -->
{% load wagtailmarkdown %}
....
....
<!-- then in the table replace the word `linebreaksbr` with the word `markdown` -->
<table
class="info-list table table-responsive">
{% if value.table.table_header %}
<thead>
<tr>
{% for column in value.table.table_header %}
{% with forloop.counter0 as col_index %}
<th scope="col" {% cell_classname 0 col_index %}>
{% if column.strip %}
{% if html_renderer %}
{{ column.strip|safe|markdown }} <-- HERE it was {{ column.strip|safe|linebreaksbr }} -->
{% else %}
{{ column.strip|markdown }} <-- HERE it was {{ column.strip|linebreaksbr }} -->
{% endif %}
{% endif %}
</th>
{% endwith %}
{% endfor %}
</tr>
</thead>
{% endif %}
<tbody>
{% for row in value.table.data %}
{% with forloop.counter0 as row_index %}
<tr>
{% for column in row %}
{% with forloop.counter0 as col_index %}
{% if first_col_is_header and forloop.first %}
<th scope="row"
{% cell_classname row_index col_index value.table.table_header %}>
{% if column.strip %}
{% if html_renderer %}
{{ column.strip|safe|markdown }} <-- HERE it was {{ column.strip|safe|linebreaksbr }} -->
{% else %}
{{ column.strip|markdown }} <-- HERE it was {{ column.strip|linebreaksbr }} -->
{% endif %}
{% endif %}
</th>
{% else %}
<td {% cell_classname row_index col_index value.table.table_header %}>
{% if column.strip %}
{% if html_renderer %}
{{ column.strip|safe|markdown }} <-- HERE it was {{ column.strip|safe|linebreaksbr }} -->
{% else %}
{% else %}
{{ column.strip|markdown }} <-- HERE it was {{ column.strip|linebreaksbr }} -->
{% endif %}
{% endif %}
</td>
{% endif %}
{% endwith %}
{% endfor %}
</tr>
{% endwith %}
{% endfor %}
</tbody>
</table>
И он отобразит ваш TableBlock в html. Надеюсь, это поможет в будущем.
На самом деле, это довольно просто, если вы согласны с тем, что пользователь должен вставить весь HTML-код ссылки, а не только
href
ценность.
Вам просто нужно пройти
dict
с обычай
rendered
вариант в
table_options
kwarg из
TableBlock
. Это должно выглядеть примерно так:
TableBlock(table_options={'renderer': 'html'})
Проверьте документы:
Проверено на Трясогузке 2.16