python基础这本书里的练习题。代码参照书中教材。
模型部分: models.py
from django.db import models
# Create your models here.
class BlogPost(models.Model):
title=models.CharField(max_length=200)
text=models.TextField()
date_added=models.DateTimeField(auto_now_add=True)
class Meta:
verbose_name_plural='主题'
def __str__(self):
return self.text
#返回title是同样的意思
表单部分:
from .models import BlogPost
class BlogPostForm(forms.ModelForm):
class Meta:
model=BlogPost
fields={'title','text'} #获取模型里的两个字段
widgets={'text':forms.Textarea(attrs={'cols':80})}
class BlogForm(forms.ModelForm):
class Meta:
model=BlogPost
fields={'title','text'}
labels={'text':'','title':''}
#widgets={'title':forms.Textarea(attrs={'cols':30})} #####没什么卵用
widgets={'text':forms.Textarea(attrs={'cols':80})}
在这里插入代码片
视图部分:
from .models import BlogPost
from .forms import BlogPostForm,BlogForm
from django.http import HttpResponseRedirect,Http404
from django.urls import reverse
# Create your views here.
def index(request):
b=BlogPost.objects.order_by('-date_added')
con={'b':b}
return render(request,'blogs/index.html',con)
def new_blog(request):
if request.method != 'POST':
form=BlogPostForm()
else:
form=BlogPostForm(data=request.POST)
if form.is_valid():
form.save()
return HttpResponseRedirect(reverse('blogs:index'))
con={'form':form}
return render(request,'blogs/new_blogs.html',con)
def edit_blog(request,blog_id):
e=BlogPost.objects.get(id=blog_id)
t=e.title
if request.method != 'POST':
form=BlogForm(instance=e)
else:
form=BlogForm(instance=e,data=request.POST) #
if form.is_valid():
form.save()
return HttpResponseRedirect(reverse('blogs:index'))
con={'e':e,'t':t,'form':form}
return render(request,'blogs/edit_blog.html',con)
在这里插入代码片
path路径:
from django.urls import path,re_path
from . import views
app_name='blogs'
urlpatterns=[
path('',views.index,name='index'),
path('new_blog/',views.new_blog,name='new_blog'),
re_path('edit_blog/(?P<blog_id>\d+)/',views.edit_blog,name='edit_blog'),
]
模板HTML:
主页—‘blogs/index.html’
{%extends 'blogs/base.html'%}
{%block content%}
<p><h1><font color='FF0000'>主页测试</font></h1></p>
{%for a in b%}
<li><p>{{a.date_added|date:'Y m d,H:i'}}</p></li>
<p>{{a.title}}</p>
<p>{{a|linebreaks}}</p>
<a href="{%url 'blogs:edit_blog' a.id%}">修改</a>
{%empty%}
<p>add</p>
{%endfor%}
{%endblock content%}
base.html:
<p><a href="{%url 'blogs:index'%}">BLOG</a></p>
<p><a href="{%url 'blogs:new_blog'%}">添加</a></p>
{%block content%}{%endblock content%}
添加新’blogs/new_blogs.html’
{%extends 'blogs/base.html'%}
{%block content%}
<p>模板功能------添加+++</p>
<form action="{%url 'blogs:new_blog'%}" method='post'>
{%csrf_token%}
{{form.as_p}}
<button name='submit'>save</button>
</form>
{%endblock content%}
修改’blogs/edit_blog.html’
{%extends 'blogs/base.html'%}
{%block content%}
<p>{{t}}</p>
<form action="{%url 'blogs:edit_blog' e.id%}" method='post'>
{%csrf_token%}
{{form.as_p}}
<button name='submit'>修改</button>
</form>
{%endblock content%}
以下运行截图