现在的位置: 首页 > 综合 > 正文

Django 之 十五分钟内创建博客

2013年11月01日 ⁄ 综合 ⁄ 共 3270字 ⁄ 字号 评论关闭
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 %}

效果如图

抱歉!评论已关闭.