在模板中包含动态对象的更好方法

时间:2018-09-21 15:00:09

标签: flask jinja2

我制作了一个带有动态模块的仪表板,具有所有相同的结构/图形,但内容和组织却不同。

我试图找到如何在蓝图烧瓶方法中重用部分代码,但没有成功。

我发现的方法是这样:

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 %}

还有另一种方式可以更正确地获得相同的内容而不使用“宏”或“包含”,因为我需要为每个小部件查询不同的数据库表或实现不同的自定义?

0 个答案:

没有答案