我想在其模板中访问结构块默认 ID

I want to access struct block default ID in its template

我想将流字段 ID 保存到它的模板中。

简而言之,在 text_question.html 我给了 id = {{ self.id }} 但是 return 什么都没有。

我想要这个是因为在 question.html 文件中我希望它与 {{ field.id }} 其中 return 流字段 ID

换句话说,我想将{{ field.id }}的值存储在text_question.html

的id字段中

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>

谢谢!!!

ID 不是块值的内置 属性 - 相反,它是 StreamField 容器用来跟踪其内容的一种机制。一个块值有一个 ID 属性 并不总是有意义的:例如,一个 CharBlock 的值是一个字符串,你不能真的有一个 .id 属性细绳。同样,StructBlock 的子块也不会被赋予一个。

因此,id 不会在块的模板上自动可用 - 如果您需要它,您需要通过 {% include_block %} 模板标记从调用模板显式传递它。例如:

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

这将使 ID 在 text_question.html 上作为变量 block_id 可用。