A simple set of abstract models and functionality to speed up the development of a portfolio type site. There are models to provide functionality for:
- Contact form
- Blog. Supports RST -> HTML conversion
- Projects, which can optionally have images
Install with:
pip install django-portfolio
Add 'portfolio' to your INSTALLED_APPS and extend as required. Here are some example usages assuming that you have created three skeleton apps in your project called contact, blog and project. This would give you a project structure something like
/your_project . |-blog |-contact |-projects
models.py:
from portfolio.contact.models import MessageBase
class Message(MessageBase):
pass
admin.py:
from django.contrib import admin
from contact.models import Message
class MessageAdmin(admin.ModelAdmin):
readonly_fields = ['subject', 'message', 'sender', 'cc_sender', 'sent']
date_hierarchy = 'sent'
list_display = ('subject', 'message', 'sender', 'sent')
list_filter = ('sent','sender')
search_fields = ['subject', 'sender', 'message']
admin.site.register(Message, MessageAdmin)
models.py:
from portfolio.blog.models import PostBase
class Post(PostBase):
pass
admin.py:
from django.contrib import admin from blog.models import Post admin.site.register(Post)
models.py:
from portfolio.projects.models import ProjectBase, ImageBase
class Project(ProjectBase):
pass
class Image(ImageBase):
pass
admin.py:
from django.contrib import admin
from django.contrib.contenttypes import generic
from projects.models import Project, Image
class ImageInline(generic.GenericTabularInline):
model = Image
class ProjectAdmin(admin.ModelAdmin):
inlines = [
ImageInline,
]
admin.site.register(Project, ProjectAdmin)
Update your database, fire up the admin and inspect the models. You are now free to customise at will.
- django-extensions TimeStampedModel is used as the base class for all models
- django-tagging Used in blog posts. You may also want to add this to Projects
- django-tinymce There as a default for Post, but can overridden