跳转到主要内容

处理django中slugification边缘情况的pipeline

项目描述

django-slugify-processor

为django提供自定义 slugify() 支持。

Python Package Build Status Docs Code Coverage License

什么是slugs?

Slugs 是URL,通常从帖子标题生成,您希望它们既易于阅读又是有效的URL。它们对SEO友好。

Django提供了一个 slugify() 函数,它还作为 默认过滤器 提供。

Django slugs可以通过如下的包在django模型中自动生成

问题

本项目基于一篇来自 devel.tech 的文章,该文章涵盖了 Django 的导入字符串

在 URL 重写中存在一些边缘情况。例如

术语 django.utils.text.slugify 你想要的结果
C c(正确) n/a
C++ c cpp
C# c c-sharp

更糟糕的是,如果你使用像 django-autoslug 或 django-extensions 中的 AutoSlugField 这样的专用模型字段,默认行为可能是在 "c" 被占用后,将 C++ 和 C# 的缩略名称命名为 "c-1"、"c-2"。

这是另一个例子,首字母缩略词/缩写词

术语 django.utils.text.slugify 你(可能)想要的结果
纽约市 new-york-city nyc
Y Combinator y-combinator yc
波特兰 portland pdx
德克萨斯州 texas tx
$ ''(空) usd, aud, 等等?
US$ us usd
A$ a aud
比特币 比特币 btc
美国 united-states usa
英雄联盟 league-of-legends league
Apple® iPod Touch apple-ipod-touch ipod-touch

每个网站和利基市场都有自己的边缘情况。因此,我们需要一个可以扩展的解决方案,你可以自定义函数。

django-slugify-processor 如何帮助

这基于 django.utils.text.slugify 来处理你的 Django 项目的边缘情况。默认情况下,django-slugify-processor 将通过 django 的默认行为进行传递。通过在 Django 项目的设置文件中添加 slugification 函数,你可以进行调整。

安装

$ pip install django-slugify-processor

配置

要创建一个处理器,创建一个接受字符串并返回字符串的函数。假设这是 project/app/slugify_processors.py

def my_processor(value):
   value = value.replace('++', 'pp')
   return value

在你的设置中,添加一个指向该函数的字符串列表 SLUGIFY_PROCESSORS。任何与 import_string 兼容的内容,都可以在你的设置文件中使用

SLUGIFY_PROCESSORS = [
   'project.app.slugify_processors.my_processor'
]

使用

在正常的 django 代码中

django_slugify_processor.text 导入 slugify

from django_slugify_processor.text import slugify

print(slugify('C++'))
> 'cpp'

模板代码

django-slugify-processor 是为了覆盖内置的 slugify 过滤器。

通过加载

你可以在模板中通过 {% load django_slugify_processor %} 默认加载。

在你的设置 INSTALLED_APPS

INSTALLED_APPS = [
    'django_slugify_processor'
]

在你的模板中

{% load slugify_processor %}
{{"C++"|slugify}}

通过内置

为了使所有模板都能使用,在你的模板引擎的 OPTIONS 中添加 django_slugify_processor.template_tags

TEMPLATES = [{
    'BACKEND': 'django.template.backends.django.DjangoTemplates',
    'OPTIONS': {
        'builtins': [
            'django_slugify_processor.templatetags.slugify_processor',
        ],
    },
}]

在模板文件内部

{{"C++"|slugify}}

输出应该是:cpp

模型

有关最新文档,请查看你所使用的插件(例如 django-autoslug 或 django-extensions)的文档。

要使用 django-slugify-processor 的 slugify 而不是 django 的默认版本,将有一个字段选项来使用该函数。

django-extensions

测试于 1.9.7(2017-11-26)

from django.db import models

from django_extensions.db.fields import AutoSlugField
from django_slugify_processors.text import slugify

class MyModel(models.Model):
    title = models.CharField(max_length=255)
    slug = AutoSlugField(
        populate_from='title',
        slugify_function=slugify
    )

django-autoslug

测试于 1.9.3(2017-11-26)

from django.db import models

from autoslug import AutoSlugField
from django_slugify_processors.text import slugify

class MyModel(models.Model):
    title = models.CharField(max_length=255)
    slug = AutoSlugField(
        populate_from='title',
        slugify=slugify
    )

致谢

  • 基于 DRF 的 tox.ini(BSD 2-clause 许可证)
  • 基于 RTD / devel.tech 的 yapf 配置(MIT 许可证)

项目详情

开发

安装稳定版本

$ pip install django-slugify-processor

本地安装

$ git clone https://github.com/tony/django-slugify-processor.git
$ cd ./django-slugify-processor
$ poetry shell
$ poetry install

测试

$ make test

项目详情


下载文件

下载适合您平台的文件。如果您不确定选择哪个,请了解有关安装包的更多信息。

源分发

django_slugify_processor-1.7.0.tar.gz (10.0 kB 查看散列)

上传时间

构建分发

django_slugify_processor-1.7.0-py3-none-any.whl (7.6 kB 查看散列)

上传时间 Python 3

支持者: