跳转到主要内容

具有URL预览的高级slug字段。

项目描述

django-slug-preview

提供实时URL预览的高级slug字段。

这受到了WordPress提供的“永久链接”预览的启发。虽然看起来还不够花哨,但这对于Django项目来说是一个良好的开始。欢迎提出改进意见!

https://github.com/edoburu/django-slug-preview/raw/master/docs/images/slugpreview1.png

安装

首先安装模块,最好是在虚拟环境中。可以从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-py3-none-any.whl (12.5 kB 查看哈希)

上传时间 Python 3

由以下提供支持