0

我有一个自定义模板标签来替换空格、制表符、换行符、!、@、#、$、%、&、(,)、.,用破折号:

re.sub('[,@#$%&_.?!\t\n ]+', '-', value)

当我给时,这很好用value parameter explicitly

re.sub('[,@#$%&_.?!\t\n ]+', '-', 'نمونه کد')

或者:

value='نمونه کد'
re.sub('[,@#$%&_.?!\t\n ]+', '-', value)

但是在模板中,当我想在对象列表的字段上使用此标签时subject,它不能正常工作,只是用破折号替换空格:

{% for n in news %}
   <a href="{% url CompanyHub.views.getNews n.subject|custom_unicode_slugify,n.pk %}" >{{n.description|safe|truncatewords_html:15}}</a>
{% endfor %}

这是我的客户模板标签:

def custom_unicode_slugify(value):
    return re.sub('[,@#$%&_.?!\t\n ]+', '-', value)

register.filter('custom_unicode_slugify', custom_unicode_slugify)

我尝试使用此标签而不使用n|custom_unicode_slugifyn.subject|custom_unicode_slugify因为我的模型__unicode__()方法返回subject field,但我收到此错误:

Caught TypeError while rendering: expected string or buffer
4

1 回答 1

0

我终于想出了这个解决方案:使用模板标签时unicode method不会立即运行,所以我unicode subject定义__unicode__models.py

def __unicode__(self):
    return self.subject
def unicode_subject(self):
    return unicode(self.subject)

在模板中:

<a href="{% url CompanyHub.views.DocDetails doc.unicode_subject|custom_unicode_slugify,doc.pk %}">{{doc.content}}</a>
于 2012-07-14T13:10:28.257 回答