2016-02-07 5 views
5

पर कनवर्ट करें मैं एक ट्विटर शीर्षक हैशटैग बनाने के लिए कैमलकेज़ में एक पोस्ट शीर्षक को बदलने की कोशिश कर रहा हूं, मैं स्ट्रिप का उपयोग कर रहा हूं लेकिन इसके बजाय ऑब्जेक्ट लौट रहा हूं, मुझे नहीं पता कि यह सही तरीका है या नहीं?पोस्ट शीर्षक को कैमेलकेस

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

कौन सा टेम्पलेट वर में <built-in method strip of unicode object at 0x031ECB48> देता है, परिणाम मैं तलाश कर रहा हूँ टेम्पलेट

# 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

क्या आप अपनी पोस्ट मॉडल परिभाषा दिखा सकते हैं? धन्यवाद। – alecxe

+0

मैंने पोस्ट मॉडल – linski

+0

जोड़ा है ठीक है, हो सकता है कि यह मुझे कुछ याद आ रही हो या पर्याप्त कॉफी न हो। पीईसी फाइलों को हटाने और सर्वर को पुनरारंभ करने का प्रयास करें - यह वास्तव में ऐसा लगता है कि यह '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

यह बहुत अच्छा काम करता है मुझे 'फॉर्म' को' instance' में बदलना था। इसके दिखाए गए कैमेलकेस – linski

4

strip केवल निकाल देता में इस MyPostTitle की तरह है स्ट्रिंग की शुरुआत या अंत से व्हाइटस्पेस (https://docs.python.org/2/library/string.html#string.strip)। आप उपयोग कर सकते हैं एक साइड नोट के रूप में

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

, यह अपने मॉडल वर्ग के लिए एक विधि के रूप में इस कार्यक्षमता जोड़ने के लिए क्लीनर हो सकता है:

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

बहुत बढ़िया हैशटैग फ़ंक्शन बेहतर काम करता है। धन्यवाद – linski

1

पायथन की यूनिकोड कक्षा में title() विधि भी है, जिसका अर्थ है आप:

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

ध्यान दें कि .title().replace() का आदेश महत्वपूर्ण है!

+0

धन्यवाद, मुझे लगता है कि यह एक बेहतर कारण है क्योंकि मुझे 'आयात पुनः' पायथन नहीं करना है, मैं शीर्षक() विधि का उपयोग कर सकता हूं । – linski

संबंधित मुद्दे