具有URL预览的高级slug字段。
项目描述
django-slug-preview
提供实时URL预览的高级slug字段。
这受到了WordPress提供的“永久链接”预览的启发。虽然看起来还不够花哨,但这对于Django项目来说是一个良好的开始。欢迎提出改进意见!
安装
首先安装模块,最好是在虚拟环境中。可以从PyPI安装
pip install django-slug-preview
或者可以将当前文件夹安装到开发环境中
pip install -e .
将slug_preview添加到你的INSTALLED_APPS
INSTALLED_APPS += (
'slug_preview',
)
使用方法
在你的模型中使用slug_preview.models.SlugPreviewField而不是标准models.SlugField。
在你的表单中添加slug_preview.forms.SlugPreviewFormMixin。
例如
from django.db import models
from slug_preview.models import SlugPreviewField
class MyModel(models.Model):
slug = SlugPreviewField(_("Slug"))
在管理界面中,可以使用SlugPreviewModelForm快捷方式
from django.contrib import admin
from django import forms
from slug_preview.forms import SlugPreviewModelForm
@admin.register(MyModel)
class MyModelAdmin(admin.ModelAdmin):
form = SlugPreviewModelForm
在自定义表单中,直接使用SlugPreviewFormMixin
from django import forms
from slug_preview.forms import SlugPreviewFormMixin
from .models import MyModel
class MyModelForm(SlugPreviewFormMixin, forms.ModelForm):
class Meta:
model = MyModel
特殊模型URL
当一个模型有自定义URL布局(不仅仅是/{slug}/)时,你可以在模型中添加一个get_absolute_url_format()方法。例如
from django.db import models
from slug_preview.models import SlugPreviewField
class Page(models.Model):
parent = models.ForeignKey('self')
slug = SlugPreviewField(_("Slug"))
# ...
def get_absolute_url(self):
if self.parent_id:
return "{0}{1}/".format(self.parent.get_absolute_url(), self.slug)
else:
return "/{0}/".format(self.slug)
def get_absolute_url_format(self):
if self.parent_id:
return "{0}{{slug}}/".format(self.parent.get_absolute_url())
else:
return "/{slug}/"
对于博客,您还可以添加 /blog/{year}/{month}/ 格式
from django.core.urlresolvers import reverse
from django.db import models
from django.utils.timezone import now
from slug_preview.models import SlugPreviewField
class Article(models.Model):
slug = SlugPreviewField(_("Slug"))
pubdate = models.DateTimeField(default=now)
# ...
def get_absolute_url(self):
root = reverse('article_list')
return "{root}/{year}/{month}/{slug}/".format(
root=reverse('article_list').rstrip('/'),
year=self.pubdate.strftime('%Y'),
monthy=self.pubdate.strftime('%M'),
slug=self.slug
)
def get_absolute_url_format(self):
root = reverse('article_list')
pubdate = self.pubdate or now()
return "{root}/{year}/{month}/{{slug}}/".format(
root=reverse('article_list').rstrip('/'),
year=pubdate.strftime('%Y'),
monthy=pubdate.strftime('%M'),
)
改进此软件包
此模块旨在也可用于其他项目。如果您对它有任何不喜欢的地方,或者认为它不够灵活,请告诉我们。我们很高兴改进它!也欢迎提出拉取请求。:-)
项目详情
下载文件
下载适用于您平台的文件。如果您不确定选择哪个,请了解有关 安装软件包 的更多信息。
源代码分发
django-slug-preview-2.0.1.tar.gz (11.1 kB 查看哈希)
构建分发
关闭
django-slug-preview-2.0.1.tar.gz 的哈希
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 54967848101ffd241321e3373b4675d98a40e683c0c54b7d7efbfb2c653d2bf9 |
|
MD5 | 8117ec165427a5b43dfa6dd5e64abe54 |
|
BLAKE2b-256 | 90ca8c80606da33dcb8b0658f8b139ee3dacc618a889d881c88229bd92b75088 |
关闭
django_slug_preview-2.0.1-py3-none-any.whl 的哈希
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 87e69df096534be417f9f5296d1a8d256bc6eeac608ada899920ff9c751ba57f |
|
MD5 | ef4bf80b80f4e78370da2ba54b25f24a |
|
BLAKE2b-256 | 359dcb76d4cd8c520c1523e3b512a7f248182c96f42e0b4709585c7a8eaa58f6 |