处理django中slugification边缘情况的pipeline
项目描述
django-slugify-processor
为django提供自定义 slugify()
支持。
什么是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 许可证)
项目详情
-
python 支持 >= 3.8,pypy3
-
django 支持 > 3.2
-
变更日志 https://django-slugify-processor.git-pull.com/history.html
-
许可证 MIT
-
git 仓库
$ git clone https://github.com/tony/django-slugify-processor.git
开发
安装稳定版本
$ 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
项目详情
下载文件
下载适合您平台的文件。如果您不确定选择哪个,请了解有关安装包的更多信息。
源分发
构建分发
散列 for django_slugify_processor-1.7.0-py3-none-any.whl
算法 | 散列摘要 | |
---|---|---|
SHA256 | a8ac43fef1835eac735ef5f8f99379afe948c689d808bedb5af5e46d0df90ab6 |
|
MD5 | dda837cbac484a01012bfab0646a817a |
|
BLAKE2b-256 | 8901e5e5aadf796906555445420f58ab3b4de04a47eb1ae0aeadb77b0447aee3 |