python - 我想在其模板中访问结构块默认 ID
问题描述
我想将流字段 ID 保存到它的模板中。
简而言之,在 text_question.html 中,我给出了 id = {{ self.id }} 但返回 Nothing。
我想要这个,因为在 question.html 文件中我希望它与返回流字段 ID 的 {{ field.id }} 进行比较
换句话说,我想将 {{ field.id }} 的值存储在 text_question.html 的 id 字段中
模型.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 }}"
问题.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 %}
这将使 IDtext_question.html
作为变量可用block_id
。
推荐阅读
- influxdb - 在influx中使用flux语言修改系列数据
- python - 循环字符和整数
- arrays - 数组过滤不会改变 Crystal 中的数组
- node.js - 尝试纱线启动时出现奇怪的 IP - EADDRNOTAVAIL
- laravel - Unbale 为在 Laravel 上创建的 api 在 Swagger hub 上的 api doc 中提供授权
- c# - 将通用列表转换为 IEnumerable 列表以将其传递给 View
- selenium-webdriver - 使用 nbsp 定位元素
- python - 如何连接所有列表(每个列表都是我的 for 循环)
- javascript - Jquery 在 .each() 函数内的另一个选定选项中更改选项的文本
- javascript - 如何使用 JavaScript 从插件中获取 osclass 主题 HTML?