Python 将文章标题转换为CamelCase
我正在尝试将帖子标题转换为CamelCase来创建一个twitter标签,我正在使用strip,但是它返回了一个对象,我不知道这是不是正确的方法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':
# 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'