如何合并两个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
相关产品推荐
相关产品推荐

