平台 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 %}
完成后的运行界面如下: