博客基础_django_python从入门到实践_添加主题_添加条目_用户版

 要求及文件

  用户可以添加新主题,添加新条目,以及编辑既有条目

   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 import Topic, 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})}
View Code

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='topics'),
 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 ]    
View Code

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 %}
7     
View Code

      

 

 

  

猜你喜欢

转载自www.cnblogs.com/dignity/p/9818676.html