【问题标题】:Get page url and shorten link in Django Template在 Django 模板中获取页面 url 并缩短链接
【发布时间】:2013-10-13 11:17:21
【问题描述】:

我想获取一个特定的页面 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}}

这是最好的方法吗?我错过了什么?

【问题讨论】:

    标签: python django django-models django-views django-templates


    【解决方案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})
    

    【讨论】:

    • 谢谢。测试您的代码后,它没有正确缩短网址。页面url为:127.0.0.1:8000/artlyf/1/topman缩短后在模板上打印出这个url:127.0.0.1:8000/artlyf/1/topman/b有什么想法吗?
    • 那是一个完全不同的问题:)
    • 这是我的 urls.py:url(r'^artlyf/(?P\d+)/(?P[-\d\w]+)/$' , 'artapp.views.artdetail', name='artdetail'),
    • 首先,index_to_char 是什么?
    • 我忘了添加这个 :_char_map = string.ascii_letters+string.digits def index_to_char(sequence): return "".join([_char_map[x] for x in sequence]) 它是一个函数转换链接。
    【解决方案2】:

    link_db=models.Arts() 导致link_db 是一个新对象,它没有分配 id,也许这就是它不生成 url 的原因。

    我认为link_db.get_short_id() 你的意思是post.get_short_id()

    【讨论】:

    猜你喜欢
    • 2014-08-11
    • 2015-12-19
    • 2018-12-01
    • 2020-05-07
    • 2019-12-05
    • 1970-01-01
    • 2021-05-23
    • 2014-04-17
    • 1970-01-01
    相关资源
    最近更新 更多