(Django) 19.1.1 새 주제 추가

2963 단어 Django
본 프로그램의: 새로운 주제를 추가할 수 있습니다.
방법은 이전과 거의 같다. URL을 정의하고 보기 함수를 편집하며 템플릿을 작성한다.폼을 포함하는 모듈forms를 가져와야 하는 주요 차이점py.
1. 주제 추가를 위한 양식
ModelForm을 사용하여 폼을 만들었습니다. 이 폼은 18장에서 정의한 모델의 정보에 따라 자동으로 폼을 만듭니다.
모델스에서.py 동급 디렉터리에서forms 만들기py.
froms.py
from django import forms

from .models import Topic, Entry

class TopicForm(forms.ModelForm):  #  forms.ModelForm
    #     Meta                   ,     text
    class Meta:
        model = Topic  #  Topic        
        fields = ['text']  #        text
        labels = {'text': ''}  #    text    

2. URL 모드 newtopic
http://localhost:8000/new_topic/
learning_logs/urls.py
from django.conf.urls import url
from . import views

urlpatterns = [
    --snip--
    
    # Page for adding a new entry.
    url(r'^new_entry/(?P\d+)/$', views.new_entry, name='new_entry'),
]

3. 뷰 함수 newtopic()
실현: new 입장topic 사이트, 폼 표시;제출한 폼을 처리하고 웹 페이지topics로 다시 지정합니다.
views.py
from django.shortcuts import render
from django.http import HttpResponseRedirect
from django.core.urlresolvers import reverse

from .models import Topic
from .forms import TopicForm

--snip--

@login_required
def new_topic(request):
    """Add a new topic."""
    #         POST,    ,     GET,              。
    if request.method != 'POST':
        #       ,        
        form = TopicForm()  #     TopicForm()  
                            
    else:
        form = TopicForm(request.POST)  
        #         ,  models.py   
        if form.is_valid():
            #   commit=False, Django          ,       new_topic 
            new_topic = form.save(commit=False)
            #           
            new_topic.save()
            #       
            return HttpResponseRedirect(reverse('learning_logs:topics'))
    #             
    #         ,     TopicForm       ,Django               
    context = {'form': form}
    return render(request, 'learning_logs/new_topic.html', context)

4. 템플릿 newtopic
new_topic.html
{% extends "learning_logs/base.html" %}  

{% block content %}

  

Add a new topic:

{% csrf_token %} {{ form.as_p }}
{% endblock content %}

5.topics에서 new 로 링크topic:
{% extends "learning_logs/base.html" %}
{% block content %}
  

Topics

    --snip--
Add new topic {% endblock content %}

좋은 웹페이지 즐겨찾기