2016-02-07 20 views
5

Tôi đang cố gắng chuyển đổi tiêu đề bài đăng thành CamelCase để tạo một hashtag twitter, tôi đang sử dụng dải nhưng trả về một đối tượng thay vì tôi không biết đây có phải là đúng không?Chuyển đổi tiêu đề bài thành 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) 

nào trả <built-in method strip of unicode object at 0x031ECB48> trong mẫu var, kết quả tôi đang tìm kiếm là như thế này MyPostTitle vào mẫu

# 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}) 
+0

Bạn có thể hiển thị định nghĩa Mô hình bài đăng của mình không? Cảm ơn. – alecxe

+0

Tôi đã thêm Mô hình bài đăng – linski

+0

Được rồi, có thể là do tôi thiếu thứ gì đó hoặc không có đủ cà phê. Hãy thử loại bỏ các tập tin pyc và khởi động lại máy chủ - nó thực sự trông giống như nó đang chạy như 'instance.title.strip' thay vì' instance.title.strip() '. – alecxe

Trả lời

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

Để tiết kiệm:

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

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

Điều này làm việc tuyệt vời tôi đã phải thay đổi 'form' để' instance'.hashtag hiển thị của nó camelcase – linski

4

strip chỉ loại bỏ các khoảng trắng từ đầu hoặc cuối của chuỗi (https://docs.python.org/2/library/string.html#string.strip). Bạn có thể sử dụng

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

Là một mặt lưu ý, nó có thể là sạch hơn để thêm chức năng này như một phương pháp để lớp mô hình của bạn:

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

Tuyệt vời, chức năng hashtag hoạt động tốt hơn. thanks – linski

1

Lớp unicode của Python cũng có phương thức title(), có nghĩa là bạn có thể làm:

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

Lưu ý rằng thứ tự của .title().replace() là quan trọng!

+0

Cảm ơn, tôi nghĩ rằng điều này thậm chí còn tốt hơn vì tôi không phải python 'import re' tôi có thể sử dụng tiêu đề() phương pháp . – linski

Các vấn đề liên quan