具有url预览的高级slug字段。
django-slug-preview的Python项目详细描述
django slug预览
提供实时url预览的高级slug字段。
这是受到wordpress提供的“permalink”预览的启发。 虽然看起来还没有那么花哨,但这是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布局(不仅仅是/{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'), )
改进此软件包
此模块也可用于其他项目。 万一你有什么不喜欢的, 或者认为它不够灵活,请让我们知道。 我们很乐意改进它!也欢迎拉取请求。:-)