2017-07-31 61 views
2

我在如何在我的應用程序中連接URL_for鏈接而苦苦掙扎。 我有一個基本的骨架應用程序設置。Flask App Builder url_for views

我希望鏈接到一個視圖(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']} 
        ) 
       ] 

回答

1

documentation關於基本視角,我們看到,

它的構造將在燒瓶註冊暴露網址爲藍本

所以一定要添加你創建的視圖,以「註冊的藍圖」。使用類似

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>') 
+0

我認爲這不是一個好主意,嵌入視圖相關的代碼(HTML)內模型模塊。這讓我很困惑。但是,FAB只有模塊/視圖,某些控制器作業在模型中實現。 –