电脑硬盘做网站服务器教程,高端企业网站设计公司,哪个网站专门做游戏脚本,教育网站制作视频一、让用户可以输入信息
创建forms.py 创建基于表单的页面的方法几乎与前面创建网页一样#xff1a;定义一个 URL #xff0c;编写一个视图函数并编写一个模板。一个主要差别是#xff0c;需要导入包含表单 的模块forms.py 。 from django import forms
from .models impor…一、让用户可以输入信息
创建forms.py 创建基于表单的页面的方法几乎与前面创建网页一样定义一个 URL 编写一个视图函数并编写一个模板。一个主要差别是需要导入包含表单 的模块forms.py 。 from django import forms
from .models import Topic,Entry
class TopicForm(forms.ModelForm):class Meta:model Topicfields [text]labels {text: }class EntryForm(forms.ModelForm):class Meta:model Entryfields [text]labels {text: }widgets {text: forms.Textarea(attrs{cols: 80})}将其添加到 learning_logs/urls.py中 定义learning_logs的URL模式
from django.urls import path
#从当前的urls.py模块所在的文件夹中导入视图
from . import views
#变量urlpatterns是一个列表包含可在应用程序learning_logs中请求的网页
app_name learning_logs
urlpatterns [#主页#第一个是正则表达式r让Python将接下来的字符串视为原始字符串引号正则表达式始于和终于何处#第二个实参指定了要调用的视图函数#第三个实参将这个URL模式的名称指定为indexpath(r,views.index,nameindex),# 显示所有的主题path(rtopics/, views.topics, nametopics),# 特定主题的详细页面path(r^topics/(?Ptopic_id\d)/$, views.topic, nametopic),# 用于添加新主题的网页path(r^new_topic/$, views.new_topic, namenew_topic),# 用于添加新条目的页面path(r^new_entry/(?Ptopic_id\d)/$, views.new_entry, namenew_entry),# 用于编辑条目的页面path(r^edit_entry/(?Pentry_id\d)/$, views.edit_entry,nameedit_entry),] 增加视图函数 learning_logs/views.py from django.shortcuts import render
from django.http import HttpResponseRedirect
from django.urls import reverse
from .models import Topic, Entry
from .forms import TopicForm, EntryForm
# Create your views here.
def index(request):学习笔记的主页return render(request, learning_logs/index.html)
def topics(request):显示所有的主题topics Topic.objects.order_by(date_added)context {topics: topics}return render(request, learning_logs/topics.html, context)
def topic(request, topic_id):显示单个主题及其所有的条目topic Topic.objects.get(idtopic_id)entries topic.entry_set.order_by(-date_added)context {topic: topic, entries: entries}return render(request, learning_logs/topic.html, context)
def new_topic(request):添加新主题if request.method ! POST:# 未提交数据创建一个新表单form TopicForm()else:# POST提交的数据,对数据进行处理form TopicForm(request.POST)if form.is_valid():form.save()return HttpResponseRedirect(reverse(learning_logs:topics))context {form: form}return render(request, learning_logs/new_topic.html, context)
def new_entry(request, topic_id):在特定的主题中添加新条目topic Topic.objects.get(idtopic_id)if request.method ! POST:# 未提交数据,创建一个空表单form EntryForm()else:# POST提交的数据,对数据进行处理form EntryForm(datarequest.POST)if form.is_valid():new_entry form.save(commitFalse)new_entry.topic topicnew_entry.save()return HttpResponseRedirect(reverse(learning_logs:topic,args[topic_id]))context {topic: topic, form: form}return render(request, learning_logs/new_entry.html, context)
def edit_entry(request, entry_id):编辑既有条目entry Entry.objects.get(identry_id)topic entry.topicif request.method ! POST:# 初次请求使用当前条目填充表单form EntryForm(instanceentry)else:# POST提交的数据对数据进行处理form EntryForm(instanceentry, datarequest.POST)if form.is_valid():form.save()return HttpResponseRedirect(reverse(learning_logs:topic, args[topic.id]))context {entry: entry, topic: topic, form: form}return render(request, learning_logs/edit_entry.html, context)二、创建模板 新增三个模板 edit_entry.html !DOCTYPE html
html langen
headmeta charsetUTF-8titleTitle/title
/head
body
{% extends learning_logs/base.html %}
{% block content %}
pa href{% url learning_logs:topic topic.id %}{{ topic }}/a/p
pEdit entry:/pform action{% url learning_logs:edit_entry entry.id %} methodpost
{% csrf_token %}
{{ form.as_p }}button namesubmitsave changes/button
/form
{% endblock content %}
/body
/html new_entry.html !DOCTYPE html
html langen
headmeta charsetUTF-8titleTitle/title
/head
body
{% extends learning_logs/base.html %}
{% block content %}
pa href{% url learning_logs:topic topic.id %}{{ topic }}/a/p
pAdd a new entry:/p
form action{% url learning_logs:new_entry topic.id %} methodpost
{% csrf_token %}
{{ form.as_p }}
button namesubmitadd entry/button
/form
{% endblock content %}
/body
/html new_topic.html !DOCTYPE html
html langen
headmeta charsetUTF-8titleTitle/title
/head
body
{% extends learning_logs/base.html %}
{% block content %}
pAdd a new topic:/pform action{% url learning_logs:new_topic %} methodpost{% csrf_token %}{{ form.as_p }}button namesubmitadd topic/button
/form
{% endblock content %}
/body
/html 在页面topics 中添加它们的链接 !DOCTYPE html
html langen
headmeta charsetUTF-8titleTopics/title
/head
body
{% extends learning_logs/base.html %}
{% block content %}pTopics/p
ul{% for topic in topics %}lia href{% url learning_logs:topic topic.id %}{{ topic }}/a/li{% empty %}
liNo topics have been added yet./li{% endfor %}
/ul
a href{% url learning_logs:new_topic %}Add a new topic:/a{% endblock content %}
/body
/html 在页面topic中添加它们的链接 !DOCTYPE html
html langen
headmeta charsetUTF-8titleTitle/title
/head
body
{% extends learning_logs/base.html %}
{% block content %}
pTopic: {{ topic }}/p
pEntries:/p
p
a href{% url learning_logs:new_entry topic.id %}add new entry/a
/pul{% for entry in entries %}
lip{{ entry.date_added|date:M d, Y H:i }}/pp{{ entry.text|linebreaks }}/pp
a href{% url learning_logs:edit_entry entry.id %}edit entry/a
/p
/li{% empty %}
li
There are no entries for this topic yet.
/li
{% endfor %}{% endblock content %}
/ul
/body
/html 三、运行效果 点击Topics 点击Add a new topic,可以增加Topic 返回结果 点击Chess 再点击增加new nentry,输入信息点击添加 返回结果 点击edit entry修改内容 如图输入修改的信息点击save changes 保存修改 返回结果: