An advanced slug field with URL previews.
Project description
django-slug-preview
An advanced slug field offering live URL previews.
This is inspired by the “Permalink” preview that WordPress offers. While not looking as fancy yet, this is a good start for Django projects. Improvements are welcome!
Installation
First install the module, preferably in a virtual environment. It can be installed from PyPI:
pip install django-slug-preview
Or the current folder can be installed for development:
pip install -e .
Add slug_preview to your INSTALLED_APPS:
INSTALLED_APPS += ( 'slug_preview', )
Usage
Use slug_preview.models.SlugPreviewField in your models instead of the standard models.SlugField.
Add slug_preview.forms.SlugPreviewFormMixin in your forms.
For example:
from django.db import models from slug_preview.models import SlugPreviewField class MyModel(models.Model): slug = SlugPreviewField(_("Slug"))
In the admin you can use the SlugPreviewModelForm shortcut:
from django.contrib import admin from django import forms from slug_preview.forms import SlugPreviewModelForm @admin.register(MyModel) class MyModelAdmin(admin.ModelAdmin): form = SlugPreviewModelForm
In custom forms, use SlugPreviewFormMixin directly:
from django import forms from slug_preview.forms import SlugPreviewFormMixin from .models import MyModel class MyModelForm(SlugPreviewFormMixin, forms.ModelForm): class Meta: model = MyModel
Special model URLS
When a model has a custom URL layout (not just /{slug}/), you can add a get_absolute_url_format() method in the model. For example:
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}/"
For a blog, you can add the /blog/{year}/{month}/ format too:
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'), )
Improving this package
This module is designed to be usable for other projects too. In case there is anything you didn’t like about it, or think it’s not flexible enough, please let us know. We’d love to improve it! Pull requests are welcome too. :-)
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file django-slug-preview-1.0.tar.gz
.
File metadata
- Download URL: django-slug-preview-1.0.tar.gz
- Upload date:
- Size: 10.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 637408287ffc25f26bdeaf1c7a7c87b03c02c28727d77ce0af5381cf235939e9 |
|
MD5 | fc6648378469100a098fc61836a8a554 |
|
BLAKE2b-256 | 07367509ffa6d5a01ab74493faa3bcfdf80594b92ec9018b2db6cb0a890c8419 |
File details
Details for the file django_slug_preview-1.0-py2.py3-none-any.whl
.
File metadata
- Download URL: django_slug_preview-1.0-py2.py3-none-any.whl
- Upload date:
- Size: 10.5 kB
- Tags: Python 2, Python 3
- Uploaded using Trusted Publishing? No
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 45ea2686bf7cdf0295369512d6aed6b5d678fdecb803eff3030f838e4c5ae2f7 |
|
MD5 | e5d30318cffa477534b5e5e272604ebc |
|
BLAKE2b-256 | 0712c474b24925d44790d6914d98edeeab7d5f6d09ddd8b38e6c32d6040cffaf |