基于标题创建链接的Python代码

基于标题创建链接的Python代码,python,web-applications,Python,Web Applications,是否有人可以发布一个python代码片段来创建基于标题的链接,比如stackoverflow(或wordpress) e、 g。 标题:跨“模块”的全局性? 对应链接:http://example.com/8277516/globals-across-modules 我不需要任何字符,除了字母、数字或“-”。另外,我不需要输出字符串的起始或结束字符为“-”我建议使用一个包含输入和输出以及回退的字典 >>> s = "Tür auf" >>> repl = {

是否有人可以发布一个python代码片段来创建基于标题的链接,比如stackoverflow(或wordpress)

e、 g。
标题:跨“模块”的全局性?

对应链接:http://example.com/8277516/globals-across-modules



我不需要任何字符,除了字母、数字或“-”。另外,我不需要输出字符串的起始或结束字符为“-”

我建议使用一个包含输入和输出以及回退的字典

>>> s = "Tür auf"
>>> repl = {'ü' : 'u', ' ': '-'}
>>> f = lambda i: repl.get(i, '-')
>>> "".join(map(f, s)).lower()
'tur-auf'
编辑

错;)因为T和r不在替换项中,但我希望你能理解。您可以得到一个包含所有字母的列表,如下所示:

>>> [chr(i) for i in range(97, 123)]
现在,您需要一个函数来检查字母或小写字母是否在列表中,如果是,请使用它,如果不是,请用dict值替换它。

这样如何:

>>> import re
>>> s = 'Global across "Modules" ?'
>>> '-'.join(item.lower() for item in re.findall(r'\w+', s))
'global-across-modules'

这适用于Python 2;在那里,它将只保留ASCII字母数字字符。在Python3下,它还将保留Unicode字母数字,这可能不是您想要的。

您可能不想重新发明轮子,因此,您可能希望使用Django的Slagify过滤器。当然,您不需要使用Django来使用它,您可以尝试查看源代码,只需要获得您想要的,这样您就不必安装整个Django包来实现这一点

以下是您将获得的信息:

>>> from django.template.defaultfilters import slugify
>>> slugify("""Global across "Modules" ?""")
u'global-across-modules'
>>> 

请注意,slug用于Django中的URL,因此它们是URL安全的。

thanx。。这正是我需要的。