2013-10-13 71 views
1

我想要獲取特定的頁面url並自動縮短url並將其顯示給用戶。在編寫下面的代碼後,它不會縮短,也不會顯示錯誤。在Django模板中獲取頁面url並縮短鏈接

Models.py

_char_map = string.ascii_letters+string.digits 

def index_to_char(sequence): 
    return "".join([_char_map[x] for x in sequence]) 

class Arts(models.Model): 
    user=models.ForeignKey(User) 
    title=models.CharField(max_length=100) 
    picture_1=models.ImageField(upload_to="photos") 
    picture_2=models.ImageField(upload_to="photos", null=True,blank=True) 
    picture_3=models.ImageField(upload_to="photos", null=True,blank=True) 
    description=HTMLField(null=True,blank=True) 
    slug=models.SlugField(max_length=100, unique=True) 
    pub_date=models.DateTimeField() 

    def __unicode__(self): 
     return u'%s' %(self.title) 

    def get_short_id(self): 
      _id=self.id 
      digits=[] 
      while _id > 0: 
       rem= _id % 62 
       digits.append(rem) 
       _id /=62 
      digits.reverse() 
      return index_to_char(digits) 

    @staticmethod 
    def decode_id(string): 
     i=0 
     for c in string: 
      i=i*64+_char_map.index(c) 
     return i 

    def save(self, *args, **kwargs): 
     if not self.id: 
      self.slug=slugify(self.title) 
     super(Arts,self).save(*args,**kwargs) 

Views.py

我想縮短鏈接

def artdetail(request,arts_id,slug): 
     post=Arts.objects.get(id=arts_id,slug=slug) 

     link_db=models.Arts() 
     currentUrl = request.build_absolute_uri(link_db.get_short_id()) 
     return render_to_response('postdetail.html',{'post':post, ' Arts':Arts,'currentUrl':currentUrl},context_instance=RequestContext(request)) 

模板

{{currentUrl}} 

的頁面,這是最好的方式去解決它?我錯過了什麼?

回答

1

link_db=models.Arts()這裏您指的是藝術模型的新實例;您需要參考您提取的實例,即post

from django.shortcuts import render, get_object_or_404 

def artdetail(request,arts_id,slug): 
     post = get_object_or_404(Post, id=arts_id,slug=slug) 
     currentUrl = request.build_absolute_uri(post.get_short_id()) 
     return render(request, 
        'postdetail.html', 
        {'post':post,'Arts':Arts,'currentUrl':currentUrl}) 
+0

謝謝。在測試您的代碼後,它沒有正確縮短網址。頁面網址爲:http://127.0.0.1:8000/artlyf/1/topman/縮短後,它會在模板上打印出此網址:http://127.0.0.1:8000/artlyf/1/topman/b任何想法? – picomon

+0

這是一個完全不同的問題:) –

+0

這是我的urls.py:url(r'^artlyf/(?P \ d +)/(?P [ - \ d \ w] +)/ $',' artapp.views.artdetail',name ='artdetail'), – picomon

1

link_db=models.Arts()結果link_db是一個新的對象,它沒有id分配,也許這就是爲什麼它不生成url。我想代替你的意思是post.get_short_id()

+0

謝謝。在測試你的代碼之後,它沒有正確縮短網址。頁面網址爲:http://127.0.0.1:8000/artlyf/1/topman/縮短後,它會在模板上打印出此網址:http://127.0.0.1:8000/artlyf/1/topman/b任何想法? – picomon