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

如何合并两个Django视图以在同一页面渲染表单与Folium地图?

Django视图合并错误分析:表单与Folium地图同页渲染

你的CombinedView存在几个关键错误,导致无法正常渲染表单和地图:

  • 未定义的变量引用:在CombinedView.get()方法中直接使用form和m,但这两个变量既没有在方法内创建,也无法访问其他视图/函数的局部变量(formView里的表单实例、folium_map里的m都是局部变量,作用域仅限各自函数)。
  • 未正确生成表单实例:没有初始化StLouisCityLandTaxForm的实例,直接用不存在的form变量填充上下文。
  • 未生成地图实例:没有执行地图创建、添加标记的逻辑,直接调用不存在的m._repr_html_()。
  • 冗余的formView实现:FormView基类已经自带处理表单GET请求的逻辑,你重写的get方法完全多余,且类名不符合Python大驼峰命名规范(应该是FormView而非formView)。

修正后的CombinedView代码

import folium
from django.shortcuts import render
from django.views import View
from .models import StLouisCityLandTax
from .forms import StLouisCityLandTaxForm

class CombinedView(View):
    def get(self, request):
        # 1. 生成表单实例
        form = StLouisCityLandTaxForm()
        
        # 2. 生成Folium地图
        properties = StLouisCityLandTax.objects.all()
        m = folium.Map(location=[38.627003, -90.199402], zoom_start=11)
        for prop in properties:
            coordinates = (prop.point_y, prop.point_x)
            folium.Marker(coordinates).add_to(m)
        
        # 3. 组装上下文并渲染主模板
        context = {
            'form': form,
            'map_html': m._repr_html_(),
        }
        return render(request, 'maps/StLouisCityLandTaxSale.html', context)

模板注意事项

确保你的StLouisCityLandTaxSale.html模板中正确渲染表单和地图:

<!-- 渲染表单 -->
<form method="post">
    {% csrf_token %}
    {{ form.as_p }}
    <button type="submit">提交</button>
</form>

<!-- 渲染Folium地图 -->
<div>{{ map_html|safe }}</div>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 08:54:59