2016-02-07 9 views
5

投稿のタイトルをCamelCaseに変換して、Twitterのハッシュタグを作成しようとしていますが、ストリップを使用していますが、代わりにオブジェクトを返しています。テンプレートvarに<built-in method strip of unicode object at 0x031ECB48>を返し投稿のタイトルをCamelCaseに変換する

# 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) 

は、私が探している結果は、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}) 
+0

投稿モデルの定義を表示できますか?ありがとう。 – alecxe

+0

私はポストモデル – linski

+0

を追加しました。それは、私が何かを見逃しているか、十分なコーヒーを持っていないかもしれません。 pycファイルを削除してサーバを再起動してください。実際には 'instance.title.strip()'ではなく 'instance.title.strip'として実行されているようです。 – alecxe

答えて

3
>>> 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()]) 
+1

これはうまく動作します。 'form'を' instance'に変更しなければならなかったのです。私はcamelcaseを表示しています。 – linski

4

stripのみ削除

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

テンプレートにこのMyPostTitleようなものです文字列の先頭または末尾の空白(https://docs.python.org/2/library/string.html#string.strip)。

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

驚くべきことに、ハッシュタグ機能がうまく機能します。おかげで – linski

1
あなたはあなたのモデルクラスにメソッドとして、この機能を追加するためにクリーンであるかもしれない、注意点として

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

を使用する場合があります

Pythonのunicodeクラスには、title()メソッドがあります。つまり、次のようになります。

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

.title().replace()の順番が重要であることに注意してください。

+0

ありがとう、私はこれがもっと良い理由だと思います。 。 – linski

関連する問題