Python 在Django模板中获取页面url并缩短链接
我想获得一个特定的页面url,并自动缩短url,并将其显示给用户。在编写以下代码后,代码没有缩短,也没有显示错误 Models.pyPython 在Django模板中获取页面url并缩短链接,python,django,django-models,django-views,django-templates,Python,Django,Django Models,Django Views,Django Templates,我想获得一个特定的页面url,并自动缩短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=model
_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
我想缩短链接的页面
模板
{{currentUrl}}
这是最好的方法吗?我缺少什么?link\u db=models.Arts()
导致link\u db
成为一个新对象,没有分配id,可能这就是它不生成url的原因
我想你的意思是post.get\u-short\u-id()
,link\u-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。页面url是:缩短后,它在模板上打印出这个url:有什么想法吗?这是一个完全不同的问题:)这是我的url.py:url(r'^artlyf/(?P\d+)/(?P[-\d\w]+)/$,'artapp.views.artdetail',name='artdetail'),首先,什么是“索引到字符”?我忘了添加以下内容:“\u char\u map=string.ascii\u字母+string.digits def index\u to\u char(sequence):return”“。join([\u char\u map[x]表示序列中的x])是一个转换链接的函数。谢谢。测试代码后,它没有正确缩短url。页面url是:缩短后,它会在模板上打印出这个url:有什么想法吗?
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})