平臺 pycharm python3.6 Django 1.8.5
各文件夾的設置均按照課本的要求執行,項目代碼如下:
Blog/urls.py
from django.conf.urls import include, url
from django.contrib import admin
urlpatterns = [
url(r'^admin/', include(admin.site.urls)),
url(r'',include('blogs.urls',namespace='blogs'))
]
Blog/settings.py 的INSTALLED_APP代碼中加入‘blogs’
blogs/admin.py
from django.contrib import admin
from blogs.models import BlogPost
# Register your models here.
admin.site.register(BlogPost)
blogs/models.py
from django.db import models
# Create your models here.
class BlogPost(models.Model):
title = models.CharField(max_length=100)
text = models.TextField()
date_added = models.DateTimeField(auto_now_add=True)
def __str__(self):
return self.title
blogs/urls.py
from django.conf.urls import url
from . import views
urlpatterns=[
url(r'^$',views.index,name='index'),
url(r'^topics/$',views.topics,name='topics'),
url(r'^new_blog$',views.new_blog,name='new_blog'),
url(r'^edit_blog/(?P<blog_id>\d+)$',views.edit_blog,name='edit_blog'),
]
blogs/views.py
from django.shortcuts import render
from django.http import HttpResponseRedirect
from django.core.urlresolvers import reverse
# Create your views here.
from .models import BlogPost
from .forms import BlogPostForm
def index(request):
return render(request, 'blogs/index.html')
def topics(request):
topics = BlogPost.objects.order_by('date_added')
context = {'topics': topics}
return render(request, 'blogs/topics.html', context)
def new_blog(request):
if request.method!='POST':
form=BlogPostForm()
else:
form=BlogPostForm(request.POST)
if form.is_valid():
form.save()
return HttpResponseRedirect(reverse('blogs:topics'))
context={'form':form}
return render(request,'blogs/new_blog.html',context)
def edit_blog(request,blog_id):
blog=BlogPost.objects.get(id=blog_id)
if request.method!='POST':
form=BlogPostForm(instance=blog)
#括號中缺少instance=blog會使edit blog時文本框空白
else:
form=BlogPostForm(instance=blog,data=request.POST)
if form.is_valid():
form.save()
return HttpResponseRedirect(reverse('blogs:topics'))
context={'blog':blog,'form':form}
return render(request,'blogs/edit_blog.html',context)
blogs/forms.py
from django import forms
from .models import BlogPost
class BlogPostForm(forms.ModelForm):
class Meta:
model=BlogPost
fields=['title','text']
labels={'title':'title','text':'text'}
widgets={'text':forms.Textarea({'cols':80})}
templates/blogs中的html文件代碼如下:
base.html
<p>
<a href="{% url 'blogs:index' %}">BlogPost</a>-
<a href="{% url 'blogs:topics' %}">blogs</a> <!--如果連接後網頁不正確,檢查冒號後topics是否正確-->
</p>
{% block content %}{% endblock content %}
index.html
{% extends "blogs/base.html" %}
{% block content %}
<p>write anything you want to post to others!</p>
{% endblock content %}
topics.html
{% extends "blogs/base.html" %}
{% block content %}
<p>Blogs:</p>
<ul>
{% for blog in topics %} <!--如果連接後的界面錯誤,檢查blog和topics兩個變量書寫是否正確-->
<li>
<p>{{ blog.date_added|date:'M d,Y H:i' }}</p>
<p>{{ blog.title }}:</p>
<p>{{ blog.text|linebreaks }}</p>
<p><a href="{% url 'blogs:edit_blog' blog.id%}">edit blog</a> </p>
</li>
{% empty %}
<li>
there is no blog!
</li>
{% endfor %}
</ul>
<a href="{% url 'blogs:new_blog' %}">Add a new blog:</a>
{% endblock content %}
new_blog.html
{% extends "blogs/base.html" %}
{% block content %}
<p>Add a new blog:</p>
<form action="{% url 'blogs:new_blog' %}" method="post">
{% csrf_token %}
{{ form.as_p }}
<button name="submit">add blog</button>
</form>
{% endblock content %}
edit_blog.html
{% extends "blogs/base.html" %}
{% block content %}
<p>Edit blog:</p>
<form action="{% url 'blogs:edit_blog' blog.id %}" method="post">
{% csrf_token %}
{{ form.as_p }}
<button name="submit">save changes</button>
</form>
{% endblock content %}
完成後的運行界面如下: