自定义添加
自定义url需要在model中自定义一个slug的field,然后添加保存方法,因为要使用slugify,需要引入相应的方法。
from django.template.defaultfilters import slugify
具体代码
class Article(models.Model):
title = models.CharField(null=True, blank=True, max_length=500)
content = models.TextField(null=True, blank=True)
pub_date = models.DateField(auto_now=True)
# 自定义保存方法
slug = models.SlugField(default='', null=True, blank=True)
def save(self, *args, **kwargs):
s = "%s-%s" %(self.title, self.content)
self.slug = slugify(s)
super().save(*args, **kwargs)
这段代码的意思是根据title生成相应的url。若title是this is china
,则slugfiled会自动生成this-is-china
。你也可以添加其它字段以防止生成的url重复,此处回的字段为self.content
添加完成后,在模板中遍历时使用slug
在urls.py中定义相应的url格式
# url(r'^detail/(?P<id>\d+)/$', detail, name="detail"),
url(r'^detail/(?P<slug>[\w-]+)/$', detail, name="detail"),
其中第一句为使用id访问的格式,第二句为使用自定义slug访问方式。
使用插件
使用插件autoslug
可以实现相同的目的。安装完插件后在models.py中使用from autoslug import AutoSlugField
引入相应的代码。在slug处换为相应的代码即可。
详细用法https://pypi.python.org/pypi/django-autoslug/
uuslug
以上方法皆为英文,对于中文或者其它语言使用uuslug,自定义后会生成在slug field处生成相应的slug。