1

特定のページの URL を取得し、その URL を自動的に短縮して、ユーザーに表示したいと考えています。以下のコードを書いたところ、短縮されておらず、エラーも表示されませんでした。

モデル.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}}

これが最善の方法ですか?私は何が欠けていますか?

4

2 に答える 2

1

link_db=models.Arts()IDが割り当てられていない新しいオブジェクトになりますlink_db。おそらくそれがURLを生成しない理由です。

link_db.get_short_id()代わりにあなたが意味したと思いますpost.get_short_id()

于 2013-10-13T11:24:05.713 に答える
1

link_db=models.Arts()ここでは、Art モデルの新しいインスタンスを参照しています。フェッチしたインスタンスを参照する必要がある場所は次の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})
于 2013-10-13T11:25:37.827 に答える