2013-07-01 69 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。