2014-12-12 8 views
0

У меня есть Applicant модели, содержащей title, first_name и surname и я передаю их список в шаблон здесь:Запуск питона в шаблоне

{% for applicant in applicants %} 
    <tr> 
    <td>{{ applicant.id }}</td> 
    <td>{{ applicant.title.replace('^','') }} {{ applicant.first_name }} {{ ed {% 
    </tr> 
{% endfor %} 

Проблема заключается в том, что заголовки содержат хитроумный символы (^) что мне нужно заменить в питона

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

Но это приводит к тому, шаблон разорвать

Could not parse the remainder: '('^','')' from 'applicant.title.replace('^','')' 

Как запустить python по переменной шаблона без возникновения этой ошибки?

ответ

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 }} ... 
+2

Есть уже такой фильтр шаблонов: https://docs.djangoproject.com/en/1.7/ref/templates/builtins/#cut –

+0

спасибо, пропустили это. – ch3ka

+0

Спасибо, отлично работает – Jon

0

Как я могу запустить python в переменной шаблона без причин g эта ошибка?

Вы не можете, по крайней мере, не переходить на другой процессор шаблонов.

С Django вы должны выполнять все преобразования данных в представлении. Шаблон предназначен только для окончательного рендеринга html.

Что вы можете сделать, это использовать другой механизм шаблонов (jinja2 - это популярный выбор) и использовать результат этого как контент вашего ответа.

+1

«С Django вы должны выполнять все ваши преобразования данных в представлении». : это просто ложь. Система шаблонов Django поставляется с полным набором тегов и фильтров шаблонов (которые могут выполнять «преобразования данных» и т. Д.), И вы можете добавить свои собственные теги и фильтры. –

+0

Но первый пункт все еще действителен;) –