mkdir blog cd blog virtualenv venv source venv/bin/activate pip install django==1.6 pip install django-file-picker pip install django-bootstrap-toolkit pip install PIL hash -r django-admin.py startproject blog_system cd blog_system/ mkdir templates export DJANGO_SETTINGS_MODULE="blog_system.settings" export PYTHONPATH="$PYTHONPATH:'pwd'" django-admin.py startapp blog git init git add . git commit -m "Initial commit" django-admin.py syncdb django-admin.py runserver 0.0.0.0:80
urls.py
from django.conf.urls import patterns, include, url from django.contrib import admin admin.autodiscover() urlpatterns = patterns('', url(r'^$', 'blog.views.home', name='home'), # url(r'^blog/', include('blog.urls')), url(r'^blog/(?P<slug>[-\w]+)/$','blog.views.blog',name='home'), url(r'^admin/', include(admin.site.urls)), )
settings.py
TEMPLATE_DIRS=[ os.path.join(BASE_DIR,'templates'), ] # Application definition INSTALLED_APPS = ( 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'file_picker', 'file_picker.uploads', 'file_picker.wymeditor', 'bootstrap_toolkit', 'blog', 'django.contrib.admin', )
blog/admin.py
from django.contrib import admin from blog.models import Blog from django.db.models import TextField from file_picker.wymeditor.widgets import WYMeditorWidget class BlogAdmin(admin.ModelAdmin): prepopulated_fields={'slug':('title',)} list_display=('title','time') formfield_overrides={TextField:{'widget':WYMeditorWidget({}) }} class Media: js=('http://libs.baidu.com/jquerytools/1.2.7/jquery.tools.min.js',) admin.site.register(Blog,BlogAdmin)
blog/models.py
from django.db import models # Create your models here. class Blog(models.Model): time =models.DateTimeField(auto_now_add = True) title =models.CharField(max_length=100) slug =models.SlugField() perex =models.TextField() content =models.TextField() @models.permalink def get_absolute_url(self): return ('blog',[self.slug]) def __unicode__(self): return self.title class Meta: ordering =['-time']
blog/views.py
from django.shortcuts import render,get_object_or_404 from django.template.response import TemplateResponse from blog.models import Blog # Create your views here. def home(request): return TemplateResponse(request,"home.html",{'blog':Blog.objects.all()}) def blog(request,slug): blog=get_object_or_404(Blog,slug=slug) return TemplateResonse(request,"blog.html",{'blog':blog})
templates/base.html
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>My Blog</title> {% load bootstrap_toolkit %}{% bootstrap_stylesheet_tag %} <style type="text/css" media="screen"> .container{width:800px;} .navbar .container {width:800px;} </style> </head> <body> <div class="navbar navbar-inverse"> <div class="navbar-inner"> <div class="container"> <a class="brand" href="/">My Blog</a> </div> </div> </div> <div class="container"> <div id="content" class="flex"> {% block content %} {% endblock %} </div> </div> </body> </html>
templates/blog.html
{% extends "base.html" %} {% block content %} <h1>{ <small>{{ blog.time }}</small> }</h1> {{ blog.perex|safe }}<hr/> {{ blog.content|safe }} {% endblock %}
templates/home.html
{% extends "base.html" %} {% block content %} <div class="hero-unit"> <h1>My Blogs</h1> <p>Text ...</p> <p><a class="btn btn-primary btn-large" href="">Learn more</a></p> </div> {% for blog in blogs %} <h2>{{ blog }} <small>{{ blog.time }}</small> </h2> {{ blog.perex|safe }} <a class="btn" href="{{ blog.get_absolute_url }}">Read more</a> {% endfor %} {% endblock %}
效果如图