Я хочу получить доступ к идентификатору структуры блока по умолчанию в своем шаблоне - PullRequest
0 голосов
/ 23 октября 2019

Я хочу сохранить идентификатор поля потока в его шаблон.

Короче говоря, в text_question.html я даю id = {{self.id}}, но это ничего не возвращает.

Я хочу это, потому что в файле question.html я хочу сравнить его с {{field.id}}, который возвращает идентификатор поля потока

Другими словами, я хочу сохранить {{field.id}}значение в поле id text_question.html

models.py

class TextQuestionBlock(blocks.StructBlock):
    """Text Question"""

    question = blocks.CharBlock(required=True, help_text="Add your Question")
    is_save = blocks.BooleanBlock(label="Want to save this field ?", required=False)
    is_email = blocks.BooleanBlock(label="Want to get this field as an email ?", required=False)

    class Meta:  # noqa
        template = "question/question_field/text_question.html"
        icon = "edit"
        label = "Text Question"


@register_setting(icon='fa-commenting')
class QuestionSettings(BaseSetting):
    body = StreamField([
        ("text_question", TextQuestionBlock()),
    ], verbose_name='Question', blank=True)

    panels = [
        StreamFieldPanel('body')
    ]

    class Meta:
        verbose_name_plural = 'Question'
        verbose_name = 'Questions'

text_question.html

{% load tag_library %}
<input issave="{{self.is_save}}" isemail="{{ self.is_email }}" class="text_question" type="text" name="{{ self.question|to_name }}" id="{{ self.id }}" data-conv-question="{{ self.question }}"

question.html

<form name="question_form" action="" method="post" class="hidden">
            <div id="unique_id"></div>
                {% for field in question.body %}
                    {{ field.id }}
                {% endfor %}
            <input type="text" data-conv-question="test">
        </form>

Спасибо !!!

1 Ответ

1 голос
/ 23 октября 2019

Идентификатор не является встроенным свойством значения блока - скорее это механизм, используемый контейнером StreamField для отслеживания его содержимого. Не всегда имеет смысл, чтобы значение блока имело свойство ID: например, значение CharBlock является строкой, и вы не можете действительно иметь свойство .id в строке. Точно так же дочерние блоки StructBlock не получат один.

В результате идентификатор не будет автоматически доступен в шаблоне блока - если вы хотите его, вам нужно явно передать его из вызывающего шаблона,через тег шаблона {% include_block %}. Например:

{% for field in question.body %}
    {% if field.block_type == 'text_question' %}
        {% include_block field with block_id=field.id %}
    {% endif %}
{% endfor %}

Это сделает идентификатор доступным для text_question.html в качестве переменной block_id.

...