Django自定义url

自定义添加

自定义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

Django自定义url_第1张图片
遍历

在urls.py中定义相应的url格式

    # url(r'^detail/(?P\d+)/$', detail, name="detail"),
    url(r'^detail/(?P[\w-]+)/$', detail, name="detail"),

其中第一句为使用id访问的格式,第二句为使用自定义slug访问方式。

使用插件

使用插件autoslug可以实现相同的目的。安装完插件后在models.py中使用from autoslug import AutoSlugField引入相应的代码。在slug处换为相应的代码即可。

Django自定义url_第2张图片
插件

详细用法 https://pypi.python.org/pypi/django-autoslug/

uuslug

以上方法皆为英文,对于中文或者其它语言使用uuslug,自定义后会生成在slug field处生成相应的slug。

Django自定义url_第3张图片
Paste_Image.png

你可能感兴趣的:(Django自定义url)