一.修改article/models.py的内容如下
from django.db import models # Create your models here. class Article(models.Model): title =models.CharField(max_length=200) body =models.TextField() pub_date =models.DateTimeField('date published') likes =models.IntegerField() def __unicode__(self): return self.title class Comment(models.Model): name =models.CharField(max_length=200) body =models.TextField() pub_date = models.DateTimeField('date published') article = models.ForeignKey(Article)
二.修改article/forms.py的内容如下
from django import forms from models import Article,Comment class ArticleForm(forms.ModelForm): class Meta: model=Article fields=('title','body','pub_date') class CommentForm(forms.ModelForm): class Meta: model=Comment fields=('name','body')
三.修改article/urls.py的内容如下
from django.conf.urls import patterns,include,url urlpatterns = patterns('', url(r'^all/$','article.views.articles'), url(r'^get/(?P<article_id>\d+)/$','article.views.article'), url(r'^language/(?P<language>[a-z\-]+)/$','article.views.language'), url(r'^create/$','article.views.create'), url(r'^like/(?P<article_id>\d+)/$','article.views.like_article'), url(r'^add_comment/(?P<article_id>\d+)/$','article.views.add_comment'), )
四.修改article/views.py的内容如下
from django.http import HttpResponse from django.shortcuts import render_to_response from article.models import Article,Comment from forms import ArticleForm,CommentForm from django.http import HttpResponseRedirect from django.core.context_processors import csrf from django.utils import timezone def hello(request): name ="Mike" html =" <html> <body> Hi %s,this seems to have worked! </body> </html> " % name return HttpResponse(html) def hello_template_simple(request): name ="Mike" return render_to_response('hello.html',{'name':name}) def articles(request): language ='en-gb' session_language ='en-gb' if 'lang' in request.COOKIES: language = request.COOKIES['lang'] if 'lang' in request.session: session_language =request.session['lang'] return render_to_response('articles.html', {'articles':Article.objects.all(),'language':language,'session_language':session_language}) def article(request,article_id=1): return render_to_response('article.html', {'article':Article.objects.get(id=article_id)}) def language(request,language='en-gb'): response =HttpResponse("setting language to %s" % language) response.set_cookie('lang',language) request.session['lang']=language return response def create(request): if request.POST: form=ArticleForm(request.POST) if form.is_valid(): form.save() return HttpResponseRedirect('/articles/all') else: form=ArticleForm() args={} args.update(csrf(request)) args['form']=form return render_to_response('create_article.html',args) def like_article(request,article_id): if article_id: a=Article.objects.get(id=article_id) count=a.likes count+=1 a.likes=count a.save() return HttpResponseRedirect('/articles/get/%s' % article_id) def add_comment(request,article_id): a=Article.objects.get(id=article_id) if request.method == "POST": f=CommentForm(request.POST) if f.is_valid(): c=f.save(commit=False) c.pub_date=timezone.now() c.article=a c.save() return HttpResponseRedirect('/articles/get/%s' % article_id) else: f=CommentForm() args={} args.update(csrf(request)) args['article']=a args['form']=f return render_to_response('add_comment.html',args)
五.修改aritlce/templates/add_comment.html的内容如下
{% extends "base.html" %} {% block sidebar %} <ul> <li><a href="/articles/get/{{article.id}}">Cancel</a></li> </ul> {% endblock %} {% block content %} <form action="/articles/add_comment/{{article.id}}/" method="post">{% csrf_token %} <ul> {{form.as_ul}} </ul> <input type="submit" name="submit" value="Post Comment"> </form> {% endblock %}
六.运行python manage.py syncdb,修改article/templates/article.html的内容如下
{% extends "base.html" %} {% block sidebar %} <ul> <li><a href="/articles/all">Articles</a></li> </ul> {% endblock %} {% block content %} <h1> {{ article.title }} </h1> <p> {{ article.body }} </p> <p> <a> {{ article.likes }} people liked this article </a> </p> <p><a href="/articles/like/{{article.id}}">Like</a></p> <h2>Comment</h2> {% for c in article.comment_set.all %} <p>{{c.name}}:{{c.body}}</p> {% endfor %} <p><a href="/articles/add_comment/{{article.id}}">Add Comment</a></p> {% endblock %}
七.最终运行效果如下