Добавить ссылку в ячейку 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_optionskwarg из TableBlock. Это должно выглядеть примерно так:

      TableBlock(table_options={'renderer': 'html'})

Проверьте документы:

Трясогузка и Handsontable

Проверено на Трясогузке 2.16

Другие вопросы по тегам