3

我正在努力解决如何在我的应用程序中连接 URL_for 链接。我设置了一个基本的骨架应用程序。

我希望链接到内置在视图(MyView)中的函数(运行代码)。

我本质上想将一个变量(var1)传递给视图“myview/method2/var1”,并在 ContactModelView 中显示该链接。

谢谢

class MyView(BaseView):
route_base = "/myview"
@expose('/method2/<string:var1>')
@has_access
def fun_var(self, var1):
    # go to function_file and run function with var1
    param1, param2 = func_file.function(var1)
    self.update_redirect()
    return self.render_template('method3.html',
                                param1=param1,param2=param2, param3=prospects)

我的 models.py 文件有以下内容:

class Contact(Model):
id = Column(Integer, primary_key=True)
name = Column(String(150), unique = True, nullable=False)
var1 = Column(String(150))
contact_group_id = Column(Integer, ForeignKey('contact_group.id'))
contact_group = relationship("ContactGroup")

def prospect(self):
    return Markup(
        '<a href="'url_for("What To Put here?MyView.fun_var doesn't work")'">prospect</a>')

def __repr__(self):
    return self.name

然后我有意见:

class ContactModelView(ModelView):
datamodel = SQLAInterface(Contact)

label_columns = {'contact_group':'Contacts Group'}
list_columns = ['name','var1','contact_group', 'action']

show_fieldsets = [
                    (
                        'Summary',
                        {'fields':['name','var1','contact_group', 'prospect']}
                    )
                 ]
4

1 回答 1

2

在有关 BaseView 的文档中,我们看到

它的构造函数会将你在烧瓶上暴露的 url 注册为蓝图

因此,请确保添加您创建的视图,以便“注册蓝图”。使用类似的东西

appbuilder.add_view_no_menu(MyView())

您可以fabmanager list-views在控制台上运行以确保您的视图已注册。

由于您的端点需要一个var1参数,因此您必须将其提供给url_for. 像这样的东西会起作用:

class Contact(Model):
    var1 = Column(String(150))
    ...
    def prospect(self):
        return Markup(
            '<a href="' + url_for('MyView.fun_var', var1=self.var1) + '">prospect</a>')
于 2017-08-01T21:41:03.980 回答