You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Django同一页面同时渲染函数视图数据与CreateView编辑器?

解决方案

直接修改你的EditEntryView类视图,通过重写get_context_data方法把prompt数据注入模板上下文,就能在同一页面同时展示prompt列表和文本编辑器。

1. 修改类视图代码

from django.views.generic.edit import CreateView
from .models import Entry

class EditEntryView(CreateView):
    model = Entry
    fields = ['body']  # 指定渲染文本编辑器的字段
    template_name = 'your_template.html'  # 替换成你实际的模板路径

    def get_context_data(self, **kwargs):
        # 先获取父类CreateView生成的上下文(包含表单)
        context = super().get_context_data(**kwargs)
        # 把数据库中所有Entry的prompt数据加入上下文
        # 如果需要过滤特定prompt,这里可以加筛选条件,比如Entry.objects.filter(...)
        context['prompt_list'] = Entry.objects.all()
        return context

2. 调整模板内容

在你的模板your_template.html中,先遍历渲染prompt列表,再放文本编辑器的表单:

<!-- 展示所有prompt内容 -->
<div class="prompt-container">
    {% for entry in prompt_list %}
        <div class="prompt-item">
            {{ entry.prompt }}
        </div>
    {% empty %}
        <p>目前没有已存储的prompt</p>
    {% endfor %}
</div>

<!-- 文本编辑器(CreateView自动生成的表单) -->
<div class="editor-container">
    <form method="post">
        {% csrf_token %}
        {{ form.body }}  <!-- 只渲染body字段的编辑器,也可以用{{ form.as_p }}渲染整个表单 -->
        <button type="submit">保存内容</button>
    </form>
</div>

说明

  • 不需要保留原来的indexx函数视图,所有逻辑整合到EditEntryView中即可
  • 如果你原来的indexx有特定的prompt筛选逻辑,直接把筛选代码移到get_context_data的Entry.objects.all()位置就行
  • 之前直接把函数放进类视图没用,是因为类视图的上下文数据需要通过get_context_data方法统一注入,这是Django类视图的标准用法

内容的提问来源于stack exchange,提问作者Trey Beast

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 10:35:49