在模板中运行python

时间:2014-12-12 13:34:58

标签: python django django-templates

我有一个包含Applicanttitlefirst_name的{​​{1}}模型,我将这些列表传递给模板:

surname

问题是标题包含我需要在python中替换的狡猾字符( {% for applicant in applicants %} <tr> <td>{{ applicant.id }}</td> <td>{{ applicant.title.replace('^','') }} {{ applicant.first_name }} {{ ed {% </tr> {% endfor %}

^

但这会导致模板中断

applicant.title.replace('^','')

如何在模板变量上运行python而不会导致此错误?

2 个答案:

答案 0 :(得分:4)

对于这个简单的情况,您可以使用内置cut过滤器,如下所示:

<td>{{ applicant.title|cut:"^" }} ...

如果您需要更复杂的内容,可以写一个Custom Template Filter

例如,

cut就像这样实现:

def cut(value, arg):
    """Removes all values of arg from the given string"""
    return value.replace(arg, '')

您可以轻松实现以下内容:

def myfilter(value):
    """sanitizes my output"""
    for c in "_^/\\":
        value = value.replace(c, '')
    return value

并申请

<td>{{ applicant.title|myfilter }} ...

答案 1 :(得分:0)

  

如何在模板变量上运行python而不会导致此错误?

你不能,至少没有切换到不同的模板处理器。

使用Django,您应该在视图中执行所有数据转换。该模板仅用于最终渲染html。

你可以做的是使用不同的模板引擎(jinja2是一个受欢迎的选择),并使用它的输出作为你的回复内容。