python搭建personal-blog

來源:互聯網
上載者:User
前幾天寫的django 簡易部落格開發記錄,貼個連結吧

django 簡易部落格開發 1 安裝、建立、配置、admin使用
http://www.cnblogs.com/cacique/archive/2012/09/29/2707976.html
django 簡易部落格開發 2 模板和資料查詢
http://www.cnblogs.com/cacique/archive/2012/09/30/2709143.html
django 簡易部落格開發 3 靜態檔案、from 應用與自訂
http://www.cnblogs.com/cacique/archive/2012/10/01/2709668.html
django 簡易部落格開發 4 comments庫使用及ajax支援
http://www.cnblogs.com/cacique/archive/2012/10/03/2710803.html
django 簡易部落格開發 5 markdown支援、代碼高亮、gravatar頭像服務

http://www.cnblogs.com/cacique/archive/2012/10/07/2713703.html

--------------------------------------------------

django 簡易部落格開發 2 模板和資料查詢

首先還是貼一下項目地址  https://github.com/goodspeedcheng/sblog   因為代碼全在上面

上一篇部落格我們介紹了 django的安裝配置,建立project,建立app,app配置以及admin的使用,現在讓我們來瞭解一下模板的使用和模型資料的顯示。

1、首先介紹如何在視圖中使用模板

方法1

from django.template import Template, Contextfrom django.http import HttpResponseimport datetimedef current_datetime(request):    now = datetime.datetime.now()    t = Template("<html><body>It is now {{ current_date }}.</body></html>")    html = t.render(Context({'current_date': now}))    return HttpResponse(html)

它使用了模板系統,但是模板仍然嵌入在Python代碼裡,並未真正的實現資料與表現的分離。 現在讓我們將模板置於一個 單獨的檔案 中,並且讓視圖載入該檔案來解決此問題。

方法2

首先在項目目錄下建立templates檔案夾 然後在templates下建立sblog檔案夾和base.html檔案

目錄結構為

templates/  -sblog/  -base.html

然後修改setting.py

TEMPLATE_DIRS = (    '/home/gs/blog/templates',  #替換成自己的templates目錄 這裡用的是絕對路徑,也可以改成相對路徑    '/home/gs/blog/templates/sblog',)

編寫base.html

<!DOCTYPE html><html><head>    <meta charset="UTF-8" />    <title>        {% block title %}{% endblock %}            </title></head><body>    <h1>a simple blog</h1>    {% block content %}    {% endblock %}    {% block footer %}    {# 任何每個頁面都可能修改的文本地區的頁尾 #}        <p>Thanks for visiting my site! </p>    {% endblock %}</body></html>

這個叫做 base.html 的模板定義了一個簡單的 HTML 架構文檔,我們將在本網站的所有頁面中使用。 所有的子模板都在重載、添加或保留base.html塊的內容。

{% block %}: 所有的 {% block %} 標籤告訴模板引擎,子模板可以重載這些部分。 每個{% block %}標籤所要做的是告訴模板引擎,該模板下的這一塊內容將有可能被子模板覆蓋。

然後在sblog目錄下建立blog_list.html 添加以下內容

{% extends "base.html" %}{% block title %} blog list {% endblock %}{% block content %}<div class="content">    {% for blog in blogs %}        <h3>{{ blog.caption }}</h3>        <div>{{ blog.content}} </div>     {% endfor %}     </div>    {% endblock %}

templates 標籤使用 參見文檔 :https://docs.djangoproject.com/en/1.4/topics/templates/

在sblog目錄下views.py檔案添加 內容

from django.shortcuts import render_to_responsefrom sblog.models import Blogdef blog_list(request):    blogs = Blog.objects.all()    return render_to_response("blog_list.html", {"blogs": blogs})

當然,你也可以先修改視圖再添加模板

現在視圖和模板都完成了,讓我們添加url吧

首先修改blog目錄下urls.py 檔案 添加 

urlpatterns += patterns((''),    (r'^sblog/', include('sblog.urls')),)

然後修改sblog目錄下urls.py檔案 添加

#!/usr/bin/python# -*- coding: utf-8 -*-from django.conf.urls import *urlpatterns = patterns(('sblog.views'),    url(r'^bloglist/$', 'blog_list', name='bloglist'),     # name屬性是給這個url起個別名,可以在模版中引用而不用擔心urls檔案中url的修改 引用方式為{% url bloglist %})

現在 讓我們開啟 http://127.0.0.1:8080/sblog/bloglist/  在admin下添加的部落格是不是顯示出來了呢

這裡8080 連接埠是我自己設定的 預設是情況下8000

 

當然你也可以自己添加顯示的內容 比如 tag author publish_time

以上步驟不分先後,因為必須全部完成後才能在瀏覽器中顯示

2、資料查詢與過濾

因為我們只是操作資料可以在終端操作  在終端開啟項目目錄 輸入 python manage.py shell “manager.py shell” 命令是啟用Python互動解譯器的一種方法 這個方法在這裡是很有必要的,因為Django可以通過它知曉資料庫連接資訊的設定檔。

In [1]: from sblog.models import Blog

現在就可以進行資料操作,因為資料想較多,我們在這裡只進行查詢過濾操作

Blog.objects.all()  # 選擇全部對象Blog.objects.filter(caption='blogname')  # 使用 filter() 按部落格題目過濾Blog.objects.filter(caption='blogname', id="1") # 也可以多個條件#上面是精確匹配 也可以包含性查詢Blog.objects.filter(caption__contains='blogname')Blog.objects.get(caption='blogname') # 擷取單個對象 如果查詢沒有返回結果也會拋出異常#資料排序Blog.objects.order_by("caption")Blog.objects.order_by("-caption")  # 倒序#如果需要以多個欄位為標準進行排序(第二個欄位會在第一個欄位的值相同的情況下被使用到),使用多個參數就可以了Blog.objects.order_by("caption", "id")#連鎖查詢Blog.objects.filter(caption__contains='blogname').order_by("-id")#限制返回的資料Blog.objects.filter(caption__contains='blogname')[0]Blog.objects.filter(caption__contains='blogname')[0:3]  # 可以進行類似於列表的操作

每次都要用 order_by() 顯得有點囉嗦。 大多數時間你通常只會對某些 欄位進行排序。 在這種情況下,Django讓你可以指定模型的預設排序方式:

修改 models.py

class Blog(models.Model):    """docstring for Blogs"""    caption = models.CharField(max_length=50)    author = models.ForeignKey(Author)    tags = models.ManyToManyField(Tag, blank=True)    content = models.TextField()    publish_time = models.DateTimeField(auto_now_add=True)    update_time = models.DateTimeField(auto_now=True)    def __unicode__(self):        return u'%s %s %s' % (self.caption, self.author, self.publish_time)    class Meta:        ordering = ['-publish_time']

 

3、添加部落格展示頁面

在sblog目錄下添加blog_show.html 檔案,添加以下內容

{% extends "base.html" %}{% block title %} {{ blog.caption }} {% endblock %}{% block content %}<div class="content">  <h2>blog show</h2>    <h4>{{ blog.caption }}</h4>    <div>{{ blog.content }} </div></div>    {% endblock %}

views.py 添加blog_show 視圖

from django.http import Http404def blog_show(request, id=''):    try:        blog = Blog.objects.get(id=id)    except Blog.DoesNotExist:        raise Http404    return render_to_response("blog_show.html", {"blog": blog})

修改sblog下urls.py (如果不特殊說明,以後修改urls.py檔案預設就是sblog目錄下的)添加以下內容

url(r'^blog/(?P<id>\d+)/$', 'blog_show', name='detailblog'),

修改blog_list.html

<h3>{{ blog.caption }}</h3>

改為

<h3><a href="{% url detailblog blog.id %}">{{ blog.caption }}</a></h3>
{% url detailblog blog.id %} 中 blog.id 是
url(r'^blog/(?P<id>\d+)/$', 'blog_show', name='detailblog'),

的 (?P<id>\d+) 參數

現在重新整理以下bloglist頁面 部落格標題是不是變成連結了呢,點擊查看一下吧.。

當然現在這個介面確實醜的一塌糊塗,好吧我承認這個根本就不配叫做有介面,大家還是自己修改一下吧。

 

最後原始碼可以在  https://github.com/goodspeedcheng/sblog 可以看一下 希望大家把錯誤的地方提出糾正一下。

                                                                                                                                                       謝謝

以上 內容都能在 django book 2   第四章和第五章和第八章 找到

擴充閱讀: https://docs.djangoproject.com/en/1.4/

推薦 Django 最佳實務 - 中文版  https://github.com/brantyoung/zh-django-best-practices/blob/master/readme.rst/

ps: 大四學生求實習 郵箱: cacique1103#gmail.com

                                                                                                                下一篇將介紹如何自己書寫表單添加部落格

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.