Django 之 十五分钟内创建博客

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 %}
效果如图






  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值