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

遍历

在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。

Paste_Image.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容