2013-07-01 103 views
0

我嘗試這樣做,我想一定是在鯖瑣碎的東西,但我只是想不出應該怎麼PROCEDE而且我發現的文檔相當無用。我對Python和DTL非常熟悉,但我不明白爲什麼這段代碼會拋出語法錯誤。使用故障鯖模板

基本上,所有我想要做的就是採取一個數據對象(只是一個小字典)和不同的基於該請求是來自一個鏈接。我知道用直接的python做這件事很簡單,並且按照上下文來傳遞它,但我真的想要熱身到mako。任何幫助將非常感激。

<%def name="courseware_link(datum)"> 
    % if courseware in ${request.url}: 
     <a href=${request.url}[:${request.url}.find("courseware")+len("courseware")+1]+datum["url"]> 
    % else: 
     <a href=${request.host}+"/courses/"+datum["org"]+"/"+datum["course_ids"]+"/#/courseware/"+datum["url"] 
    % endif 
</%def> 

更具體的語法錯誤是這樣的:

(SyntaxError) invalid syntax (<unknown>, line 1) (u'if courseware in ${request.url}:pass') in file '/file' at line: 70 char: 1 

和線路70是第二線% if courseware...

+0

呃,有什麼錯誤? – Marcin

+0

@Marcin語法錯誤。見第1段的末尾。 –

+0

錯誤和代碼不同步。我猜他們不是一樣的 – karthikr

回答

1

你在,如果有條件的,都a混合$ {}定期蟒蛇標籤。另外,您不能在$ {}中嵌套$ {}。你或許應該重構這個代碼是要麼出模板或成<%%>塊,但這樣的事情應該工作:

%if "courseware" in request.url: 
<a href="${request.url[:request.url.find('courseware')+len('courseware')+1]+datum['url']}"> 
%else: 
    <a href="${request.host + '/courses/' + datum['org'] + '/' + datum['course_ids'] + '/#/courseware/' + datum['url']}"> 
%endif 

這裏是一個重構版本:

<%def name="courseware_link(datum)"> 
    <%  
    if "courseware" in request.url: 
     url = request.url[:request.url.find("courseware")+len("courseware")+1] 
     url += datum["url"] 
    else: 
     url = request.host + "/courses/" + datum["org"] + "/" 
     url += datum["course_ids"] + "/#/courseware/" + datum["url"] 
    %> 
    <a href="${url}"> 
</%def> 

而且你可能想使用路由包生成你的url,而不是像這樣手動構建它們,Django應該提供一些東西來自動構建url。