我制作了一个带有动态模块的仪表板,具有所有相同的结构/图形,但内容和组织却不同。
我试图找到如何在蓝图烧瓶方法中重用部分代码,但没有成功。
我发现的方法是这样:
WidgetGeneric.py:
from flask import render_template
from flask.views import View
class WidgetGeneric(View):
title = "default_title"
has_dropdown = False
def render_template(self, context):
return render_template(self.get_template_name(),
title=context.get("title", self.title),
has_dropdown=context.get("has_dropdown", self.has_dropdown)
)
def get_template_name(self):
raise NotImplementedError()
def dispatch_request(self):
context = {'objects': self.get_objects()}
return self.render_template(context)
Widget1.py
from .WidgetGeneric import WidgetGeneric
class Widget1(WidgetGeneric):
def get_template_name(self):
return 'helper/widget/widget1.html'
index_controller.py
from .helper.widget.Widget1 import Widget1
def index():
widgets = []
widgets.append(Widget1().render_template({'title' : "pippo", "has_dropdown": True}))
widgets.append(Widget1().render_template({'title' : "pluto"}))
widgets.append(Widget1().render_template({}))
return render_template('index/index.html', logged=True, widget1_render=widgets)
Widget1.html扩展了WidgetGeneric.html
Widget1包含在 index.html 中,如下所示:
{% for widget in widget1_render %}
{{ widget|safe }}
{% endfor %}
还有另一种方式可以更正确地获得相同的内容而不使用“宏”或“包含”,因为我需要为每个小部件查询不同的数据库表或实现不同的自定义?