python編程從入門到實踐 第十九章課後答案 19-1

平臺 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 %}

完成後的運行界面如下:




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章