0

我正在尝试做一些我认为在 mako 中必须是微不足道的事情,但我只是不知道应该如何进行,而且我发现文档毫无用处。我对 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...

4

1 回答 1

1

您在 if 条件和两个a标签中将 ${} 与常规 python 混合。此外,您不能将 ${} 嵌套在 ${} 中。您可能应该将此代码重构为模板之外或 <% %> 块,但这样的事情应该可以工作:

%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。

于 2013-07-03T00:19:59.263 回答