0
我想獲得一個特定的頁面URL並自動縮短網址,並顯示給用戶。在編寫下面的代碼後,它沒有正確縮短。在Django網址沒有縮短
頁面URL
127.0.0.1:8000/artlyf/1/topman
頁網址縮短
127.0.0.1:8000/artlyf/1/topman/b
Models.py
_char_map = string.ascii_letters+string.digits
def index_to_char(sequence):
return "".join([_char_map[x] for x in sequence])
class Mrts(models.Model):
user=models.ForeignKey(User)
title=models.CharField(max_length=100)
picture_1=models.ImageField(upload_to="photos")
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(Mrts,self).save(*args,**kwargs)
Views.py
頁面的URL後要縮短
def artdetail(request,mrts_id,slug):
post=Mrts.objects.get(id=mrts_id,slug=slug)
currentUrl = request.build_absolute_uri(post.get_short_id())
return render_to_response('postdetail.html',{'post':post, ' Mrts':Mrts,'currentUrl':currentUrl},context_instance=RequestContext(request))
Urls.py
url(r'^artlyf/(?P<mrts_id>\d+)/(?P<slug>[-\d\w]+)/$', 'artapp.views.artdetail', name='artdetail'),
模板
{{currentUrl}}
怎樣纔可以適當縮短?模型中可以用來縮短網址的任何好方法?
我很難理解你能指望這個代碼來執行。您甚至沒有提供urls.py條目來縮短網址。 –
對不起,縮短的網址需要輸入並且應該放在urls.py – picomon
是的。我無法從你的文章中看出縮短的url應該是什麼樣子 - 它只是「/ short-id」還是「/ artlyf/short-id」或者完全不同的東西。 Django也不能。你需要一個urls.py條目來顯示,指向一個能夠處理簡短ID的視圖。 –