【问题标题】:Slugify string in Django在 Django 中对字符串进行 Slugify
【发布时间】:2013-05-17 19:22:06
【问题描述】:

我开发了一个表单,用户可以在其中添加他/她的first namelast name

对于usernameunique 属性),我设计了以下方法:

FirstName: harrY LastName: 波特 --> username: 哈利波特

FirstName: HARRY LastName: POTTER --> username: Harry-Potter-1

FirstName: harrY LastName: PottEr --> username: Harry-Potter-2

等等..

这是我的函数定义:

def return_slug(firstname, lastname):
    u_username = firstname.title()+'-'+lastname.title()         //Step 1
    u_username = '-'.join(u_username.split())                     //Step 2
    count = User.objects.filter(username=u_username).count()    //Step 3
    if count==0:
        return (u_username)
    else:
        return (u_username+'-%s' % count)

我不知道在Step 3 之前要做什么来实现。我应该把[:len(u_username)]放在哪里比较字符串?

编辑:

如果Harry-Potter有多个实例,则应用此方法,通过解决最后添加整数的问题。我的问题是:我将如何检查附加到Harry-Potter 的最后一个整数是什么。

【问题讨论】:

  • 你想用名字和姓氏创建一个 slug 吗?你需要数什么?
  • @PepperoniPizza:我想计算数据库中有多少Harry-Potter-X,{其中X 是一个整数}。例如,如果有Harry-Potter-56,那么下一个应该被赋予usernameHarry-Potter-57
  • 好的,我明白了,你可以发布你的模型,以便考虑查询吗?
  • @PepperoniPizza:这是默认的 User Django 内置模型。它有idemailusername等。但是,您为什么需要模型?

标签: python django string unique-constraint


【解决方案1】:

试试这个:

from django.utils.text import slugify

def return_slug(firstname, lastname):

    # get a slug of the firstname and last name.
    # it will normalize the string and add dashes for spaces
    # i.e. 'HaRrY POTTer' -> 'harry-potter'
    u_username = slugify(unicode('%s %s' % (firstname, lastname)))

    # split the username by the dashes, capitalize each part and re-combine
    # 'harry-potter' -> 'Harry-Potter'
    u_username = '-'.join([x.capitalize() for x in u_username.split('-')])

    # count the number of users that start with the username
    count = User.objects.filter(username__startswith=u_username).count()
    if count == 0:
        return u_username
    else:
        return '%s-%d' % (u_username, count)

【讨论】:

  • 我不认为这是正确的。它在哪里检查数据库中有多少Harry-Potter-X {其中X 是一个整数}?
  • 看起来怎么样?它没有经过测试,但应该可以解决问题!
  • 啊……我错过了_startwith。休息工作正常。另一方面,我的实施会很快还是你的?任何想法?我的方法没有使用任何slugify
  • 您应该使用slugify,它会删除用户名中不允许出现的字符并将字符串标准化。无论如何,我无法想象速度是一个真正的问题,这种事情是一种非常标准的做事方式。
  • 这也将单词的第一个字符大写,就像您在示例中所说的那样。
猜你喜欢
  • 2016-07-10
  • 2014-04-15
  • 2013-06-21
  • 1970-01-01
  • 2019-07-30
  • 1970-01-01
  • 2014-02-18
  • 1970-01-01
  • 2017-06-17
相关资源
最近更新 更多