部落格基礎_django_python從入門到實踐_新增主題_新增條目_使用者版
阿新 • • 發佈:2018-10-31
要求及檔案
使用者可以新增新主題,新增新條目,以及編輯既有條目
forms.py urls.py views.py html
new_topic.html new_entry.html
new_topic.html
topics.html
new_entry.html
topic.html
forms.py
1 from django import forms 2 from .models importView CodeTopic, Entry 3 4 class TopicForm(forms.modelForm): 5 def Meta: 6 model = Topic 7 text = ['text'] 8 labels = {'text': ''} # 不為欄位生成標籤 9 10 class EntryForm(forms.modelForm): 11 def Meta: 12 model = Entry 13 text = ['text'] 14 labels = {'text': ''} 15 widget = {'text': forms.Textarea(attrs={'cols': 80})}
urls.py
1 from django.conf.urls import url 2 from . import views 3 4 urlpatterns=[ 5 url(r'^$', views.index, namespace='index'), 6 url(r'^topics/$', views.topics, namespace='topicsView Code'), 7 url(r'^topics/(?P<topic_id>\d+)/$', views.topic, namespace='topic'), 8 url(r'^new_topic/$', views.new_topic, namespace='new_topic'), 9 url(r'^new_entry/(?P<topic_id>\d+)/$', views.new_entry, name='new_entry'), 10 ]
views.py
1 from django.shortcuts import render # 2 from django.http import HttpResponseRedirect # 3 from django.core.urlresolvers import reverse # 4 from .models import Topic 5 from .models import TopicForm, EntryForm 6 7 def index(request): 8 return render(request, 'learning_logs/index.html') # 無namespace 9 10 def topics(request): 11 topics = Topic.objects.order_by('date_added') 12 context = {'topics':topics} 13 return render(request, 'learning_logs/topics.html', context) 14 15 def topic(request, topic_id): 16 topic = Topic.objects.get(id=topic_id) 17 entries = topic.entry_set.order_by('-data_added') 18 context = {'topic':topic, 'entries':entries} 19 return render(request, 'learning_logs/topic.html', context) 20 21 def new_topic(request): 22 if request.method != 'POST': 23 form = TopicForm() 24 else: 25 form = TopicForm(request.POST) 26 if form.is_valid(): 27 form.save() 28 return HttpResponseRedirect(reverse('learning_logs:topics')) 29 context = {'form':form} 30 return render(request, 'learning_logs/new_topic.html', context) 31 32 def new_entry(request, topic_id): 33 topic = Topic.objects.get(id = topic_id) 34 if request.method != 'POST': 35 form = EntryForm() 36 else: 37 form = EntryForm(request.POST) 38 if form.is_valid(): 39 new_entry = form.save(commit=False) # 40 new_entry.topic = topic # 41 new_entry.save() # 42 return HttpResponseRedirect(reverse('learning_logs:topic', args=[topic_id])) 43 context = {'form':form, 'topic':topic} 44 return reder(request, 'learning_logs/new_entry.html', context)View Code
new_topic.html
1 {% extends 'learning_logs/base.html' %} 2 {% block content %} 3 <p>add a new topic: </p> 4 <form action="{% urls 'learning_logs:new_topic %}" method='post'> 5 {% csrf_token %} 6 {{ form.as_p }} 7 <button name='submit'>add topic</button> 8 </form> 9 {% endblock content %}View Code
topics.html
1 {% extends 'learning_logs/base.html' %} 2 {% block content %} 3 --snip 4 <p><a href="{% url 'learning_logs:new_topic %}">Add a new topic</a></p> 5 {% endblock content %}View Code
new_entry.html
% extends 'learning_logs/base.html' %} {% block content %} <p><a href="{% url 'learning_logs:topic' topic.id %}">{{ topic }}</p> <p>Add a new entry:</p> <form action="{% url 'learning_logs:new_entry' topic.id %}" method='post'> {% csrf_token %} {{ form.as_p }} <button name='submit'>add entry</button> </form> {% endblock content %}View Code
topic.html
1 {% extends 'learning_logs/base.html' %} 2 3 {% block content %} 4 -- snip 5 <p><a href="{% url 'learning_logs:new_entry' topic.id %}">add new entry</a></p> 6 {% endblock content %} 7View Code