2016-02-07 21 views
5

Bir twitter hashtag oluşturmak için bir yazı başlığı CamelCase dönüştürmek çalışıyorum, şerit kullanıyorum ama bunun yerine bir nesne döndüren yerine doğru yolu olup olmadığını bilmiyorum. Şablon var içinde <built-in method strip of unicode object at 0x031ECB48> döndürürİleti başlığını CamelCase dönüştürebilir

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

, aradığım sonuç 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

Post model tanımınızı gösterebilir misiniz? Teşekkürler. – alecxe

+0

Post modelini ekledim – linski

+0

Tamam, bir şey eksik veya yeterli kahve yok olabilir. Pyc dosyalarını kaldırmayı ve sunucuyu yeniden başlatmayı deneyin - gerçekten örnek.title.strip() 'yerine" instance.title.strip "işlevi görüyor gibi görünüyor. – alecxe

cevap

3
>>> a = "foo baz bar" 
>>> "".join([s.capitalize() for s in a.rsplit()]) 
>>> FooBazBar 

kaydetmek için:

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

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

Bu harika çalışıyor 'form' için 'instance'.hashtag gösteren camelcase – linski

4

strip sadece kaldırır

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

şablonuna bu MyPostTitle gibidir dize başlangıcından veya sonuna kadar boşluk (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

Harika, hashtag işlevi daha iyi çalışıyor. teşekkürler – linski

1
Değişikliklerin bir modeli sınıfına yöntemi olarak bu işlevsellik eklemek için temizleyici olabilir, bir yan not olarak

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

kullanabilir

Python unicode sınıfı ayrıca title() yöntemine sahiptir, yani şunları yapabilirsiniz:

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

.title().replace() siparişinin önemli olduğunu unutmayın!

+0

değiştirmek zorundayım Teşekkürler, bu daha iyi bir neden olduğunu düşünüyorum Python' ithalat re' zorunda değilim çünkü title() yöntemini kullanabilirim . – linski

İlgili konular