Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将文章标题转换为CamelCase_Python_Django_Python 2.7_Django Templates_Django Views - Fatal编程技术网

Python 将文章标题转换为CamelCase

Python 将文章标题转换为CamelCase,python,django,python-2.7,django-templates,django-views,Python,Django,Python 2.7,Django Templates,Django Views,我正在尝试将帖子标题转换为CamelCase来创建一个twitter标签,我正在使用strip,但是它返回了一个对象,我不知道这是不是正确的方法 # views.py def post_create(request): if not request.user.is_authenticated(): raise Http404 form_class = PostCreateForm if request.method == 'POST':

我正在尝试将帖子标题转换为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)
它在模板变量中返回
,我要查找的结果类似于模板中的
MyPostTitle

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

strip
仅删除字符串开头或结尾的空格()。你可以用

instance.hashtag = instance.title.replace(' ', '')
作为补充说明,将此功能作为方法添加到模型类中可能会更简洁:

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

import re
r = re.compile("[/!/?,:.;-]")

t = r.sub(" ",instance.title) # clear punctuation
instance.hashtag = "".join([s.capitalize() for s in t.rsplit()])

Python的unicode类还有一个
title()
方法,这意味着您可以执行以下操作:

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

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

你能展示一下你的模型定义吗?谢谢。我已经添加了Post model好的,可能是我错过了什么或者没有足够的咖啡。尝试删除pyc文件并重新启动服务器-它看起来像是以
instance.title.strip
而不是
instance.title.strip()
的形式运行。很酷,我删除了pyc文件,它可以正常工作,但是现在hashtag仍然有空格
MyPostTitle
,而不是
MyPostTitle
,任何修复此条的方法都会返回一个列表。添加了一个答案,该答案还删除了标点符号并将单词大写。这非常有效。我必须将
表单
更改为
实例
。哈希标签显示为CAMELCASE谢谢,我认为这一个更好,因为我不必使用python
导入re
我可以使用title()方法。
import re
r = re.compile("[/!/?,:.;-]")

t = r.sub(" ",instance.title) # clear punctuation
instance.hashtag = "".join([s.capitalize() for s in t.rsplit()])
$ python3
>>> 'foo bar baz'.title()
'Foo Bar Baz'
>>> 'foo bar baz'.title().replace(' ', '')
'FooBarBaz'