我在使用Jinja2作爲模板引擎的Web應用程序中一起使用Flask和Knockout。在我的瓶的應用程序,我有兩個途徑:/accounts/
和/accounts/<int:acc_id>/
,這是這個樣子:Jinja2:Flask的url_for()與Knockout的attr綁定結合使用
@app.route("/accounts/")
@login_required
def accounts():
return render_template("accounts.html")
@app.route("/accounts/<int:acc_id>/")
@login_required
def account(acc_id):
return render_template("account.html",
account_id=acc_id)
的/accounts/
路徑負載與淘汰賽視圖模型的HTML頁面。視圖模型,然後AJAX加載賬戶列表爲observableArray
,並呈現這樣的事情:
<!-- ko foreach: accounts -->
<span data-bind="text: name></span>
<!-- /ko -->
有關單個帳戶的/accounts/<int:acc_id>/
路線顯示的信息。
我想要做的是使用url_for()
在上面的HTML片段中的每個帳戶上創建一個href
屬性,將該帳戶的ID作爲參數傳遞。我無法使用Knockout模型中的參數對url_for()
進行Python調用。
一對夫婦的變化到目前爲止,我已經試過的:
串聯標識加入url_for函數調用:
<a data-bind="attr: { href: '{{ url_for('account', acc_id=' + id() + ' }}'}">
<span data-bind="text: name"></span>
</a>
這將產生一個ValueError: invalid literal for int() with base 10: '+ id() +'
因爲它讀取調用ID()作爲字符串文字。
創建在返回url_for字符串視圖模型的函數:
self.accountUrl = function(account_id) {
return '{{ url_for("admin.account", acc_id=' + account_id + ') }}';
};
,並調用它像這樣:
<a data-bind="attr: { href: $root.accountUrl(id()) }">
<span data-bind="text: name"></span>
</a>
這導致在href屬性被設置爲字符串從accountUrl()
返回的字面值,即HTML看起來像這樣:
<a href='{{ url_for("account", acc_id=1) }}'>
我覺得在這裏我必須忽略一些東西。有任何想法嗎?
是'url_for()'服務器端功能?或者它在瀏覽器的客戶端上運行? – PatrickSteele 2013-04-11 02:46:21