我在这个问题上有点困惑:
众所周知,django有一个slugify
模板标记,可以traume-von-bucher
生成Träume von Bücher
。
但从语法上讲,Träume
应该成为Traeume
,这将是正确的德语单词。
如何编写自己的自定义标记,以便将Ä
标记为Ae
?
答案 0 :(得分:4)
from django import template
from django.template.defaultfilters import stringfilter
from django.utils.text import slugify
register = template.Library()
@register.filter
@stringfilter
def germanslugify(value):
replacements = [(u'ä', u'ae')]
for (s, r) in replacements:
value = value.replace(s, r)
return slugify(value)
答案 1 :(得分:1)
只是为了添加beerbajay的答案。
我想更改整个应用程序的默认slugify (默认实现删除了挪威字符'ø'和'æ') 无需为了修改slugify调用而对所有内容进行fork / subclass。
所以我决定将其打包。只要自定义slugify像beerbajay一样实施,它应该是安全的。 例如,做一些简单的替换并调用原始的slugify; 所以它的输出不会打破任何关于它的假设。
这是我如何做到的(在Django 1.7中测试过,但它也可能适用于旧版本)
我创建了一个应用程序来包含monkeypatching代码,在此示例中称为monkeys
。
首先在已安装的应用中添加它,以便它在所有其他应用之前运行:
INSTALLED_APPS = (
'monkeys', # The monkey patches app
#... all the other apps below here
在monkeys/__init__.py
文件中添加以下代码:
import django.template.defaultfilters
from where.you.defined.it import custom_slugify
#print "MONKEY PATCHING NOW!"
#Uncomment the above to verify that this code actually called
django.template.defaultfilters.slugify = custom_slugify
只要所有应用程序都使用django.template.defaultfilters.slugify制作slug,这应该可行。