【问题标题】:Convert post title to CamelCase将帖子标题转换为 CamelCase
【发布时间】:2016-05-16 22:15:29
【问题描述】:

我正在尝试将帖子标题转换为 CamelCase 以创建 twitter 主题标签,我正在使用 strip 但它返回一个对象而不是我不知道这是否正确?

# views.py
def post_create(request):
    if not request.user.is_authenticated():
        raise Http404

    form_class = PostCreateForm
    if request.method == 'POST':

        form = form_class(request.POST, request.FILES)
        if form.is_valid():

            instance = form.save(commit=False)
            instance.creator = request.user
            instance.slug = slugify(instance.title)
            instance.hashtag = instance.title.strip()
            instance.save()


            slug = slugify(instance.title)
            return redirect(instance.get_absolute_url())

    else:
        form = form_class()

    context = {
        'form': form,
    }

    return render(request, "posts/post_create.html", context)

在模板var中返回<built-in method strip of unicode object at 0x031ECB48>,我要找的结果是这样MyPostTitle进入模板

    # Template view
    <h3>#{{instance.hashtag|title}}</h3>

models.py

class Post(models.Model):
    creator = models.ForeignKey(ProfileUser)
    title = models.CharField(max_length=80)
    hashtag = models.CharField(max_length=80)
    slug = models.SlugField(unique=True)

    def __unicode__(self):
        return self.title

    def get_absolute_url(self):
        return reverse("posts:detail", kwargs={"slug": self.slug})

【问题讨论】:

  • 你能展示你的 Post 模型定义吗?谢谢。
  • 我添加了 Post 模型
  • 好吧,可能是我错过了什么或没有足够的咖啡。尝试删除 pyc 文件并重新启动服务器 - 看起来它确实以 instance.title.strip 而不是 instance.title.strip() 运行。
  • 酷,我删除了 pyc 文件并且它可以工作,但现在主题标签仍然有空格 My Post Title 而不是 MyPostTitle 任何解决此问题的方法
  • Strip 返回一个列表。添加了一个答案,该答案还删除了标点符号并将单词大写。

标签: python django python-2.7 django-templates django-views


【解决方案1】:

strip 仅删除字符串开头或结尾的空格 (https://docs.python.org/2/library/string.html#string.strip)。你可能会使用

instance.hashtag = instance.title.replace(' ', '')

附带说明一下,将此功能作为方法添加到模型类中可能会更简洁:

class Post(models.Model):
    ...
    def hashtag(self):
        if self.title is not None:
            return self.title.replace(' ', '')

【讨论】:

    【解决方案2】:
    >>> a = "foo baz bar"
    >>> "".join([s.capitalize() for s in a.rsplit()])
    >>> FooBazBar
    

    保存:

    import re
    r = re.compile("[/!/?,:.;-]")
    
    t = r.sub(" ",instance.title) # clear punctuation
    instance.hashtag = "".join([s.capitalize() for s in t.rsplit()])
    

    【讨论】:

    • 这很好用,我不得不将 form 更改为 instance.hashtag 显示驼峰式
    【解决方案3】:

    Python 的 unicode 类也有一个title() 方法,意思是你可以这样做:

    $ python3
    >>> 'foo bar baz'.title()
    'Foo Bar Baz'
    >>> 'foo bar baz'.title().replace(' ', '')
    'FooBarBaz'
    

    注意.title().replace()的顺序很重要!

    【讨论】:

    • 谢谢,我觉得这个更好,因为我不需要 python import re 我可以使用 title() 方法。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-01
    • 2021-10-05
    • 2010-10-17
    • 2011-05-08
    • 2013-10-03
    • 1970-01-01
    相关资源
    最近更新 更多