2017-09-01 6 views
0

これまでフォームを正しく表示するには、なぜ特定の言葉を使用しているのかが少し分かりません。異なる言葉を使用して、異なる書式を表示します。DjangoでHTML形式で表示するには

この最初の例(colorist_form.html)で、私は、しかし

{% extends "base.html" %} 

{% block content %} 
    <div class="colorset-base"> 
     <h2>Create new post</h2> 
     <p class="hint">Add hex codes for each color you would like to include.</p> 
     <form id="postForm" action="{% url 'colorsets:new_color' %}" method="POST"> 
      {% csrf_token %} 
      {{ form }} 
      <button type="submit" class="submit btn btn-primary btn-large">Add Color Set</button> 
     </form> 
    </div> 
{% endblock %} 

を表示するためのフォームを取得した{{ form }}を使用しています。この例(widget_form.html)で、私は同じ{{ form }}を使用していますが、今フォームは、フォームを表示するために取得するん私は{{ user_form }}を使用しています私のregister.htmlでも

{% block content %} 
    <div class="colorset-base"> 
     <h2>Create new widget</h2> 
     <form id="postForm" action="{% url 'adminpanel:create-widget' %}" method="POST"> 
      {% csrf_token %} 
      {{ form }} 
      <button type="submit" class="submit btn btn-primary btn-large">Add Widget</button> 
     </form> 
    </div> 
{% endblock %} 

表示されません。

{% extends "base.html" %} 

{% block content %} 

<div class="form-base"> 
    {% if registered %} 
     <h1>Thank you for registering!</h1> 
    {% else %} 
     <h2>Register</h2> 
     <form method="POST"> 
      {% csrf_token %} 
      {{ user_form }} 
      <input type="submit" value="Register" /> 
     </form> 
    {% endif %} 
</div> 

{% endblock %} 

キーワード「フォーム」と「user_form」や「widget_form」などの別の単語を使用する理由を教えてください。そして、なぜwidget_form.htmlがフォームを表示しないのですか?ここで

は、それぞれのフォームやビューのために私のコードです:

adminpanelアプリのviews.py:

from django.shortcuts import render 
from adminpanel.forms import WidgetForm 
from adminpanel.models import Widget 
from django.utils import timezone 

from django.contrib.auth import authenticate,login,logout 
from django.http import HttpResponseRedirect, HttpResponse 
from django.core.urlresolvers import reverse,reverse_lazy 
from django.contrib.auth.decorators import login_required 
from django.contrib.auth.mixins import LoginRequiredMixin 
from braces.views import SelectRelatedMixin 
from django.views.generic import (TemplateView,ListView, 
            DetailView,CreateView, 
            UpdateView,DeleteView) 

# Create your views here. 
class CreateWidgetView(LoginRequiredMixin,CreateView): 
    login_url = '/login/' 
    redirect_field_name = 'index.html' 
    form_class = WidgetForm 
    model = Widget 

    def form_valid(self,form): 
     self.object = form.save(commit=False) 
     self.object.save() 
     return super().form_valid(form) 

class SettingsListView(ListView): 
    model = Widget 

    def get_query(self): 
     return Widget.object.filter(order_by('widget_order')) 

class DeleteWidget(LoginRequiredMixin,SelectRelatedMixin,DeleteView): 
    model = Widget 
    select_related = ('Widget',) 
    success_url = reverse_lazy('settings') 

    def get_queryset(self): 
     queryset = super().get_query() 
     return queryset.filter(user_id=self.request.user.id) 

    def delete(self): 
     return super().delete(*args,**kwargs) 

colorsetsアプリのviews.py:

from django.shortcuts import render 
from colorsets.forms import ColorForm 
from colorsets import models 
from colorsets.models import ColorSet 
from django.utils import timezone 

from django.contrib.auth import authenticate,login,logout 
from django.http import HttpResponseRedirect, HttpResponse 
from django.core.urlresolvers import reverse,reverse_lazy 
from django.contrib.auth.decorators import login_required 
from django.contrib.auth.mixins import LoginRequiredMixin 
from braces.views import SelectRelatedMixin 
from django.views.generic import (TemplateView,ListView, 
            DetailView,CreateView, 
            UpdateView,DeleteView) 

# Create your views here. 
#def index(request): 
# return render(request,'index.html') 

class PostListView(ListView): 
    model = ColorSet 

    def get_queryset(self): 
     return ColorSet.objects.filter(published_date__lte=timezone.now()).order_by('-published_date') 

class CreateColorSetView(LoginRequiredMixin,CreateView): 
    login_url = '/login/' 
    redirect_field_name = 'index.html' 
    form_class = ColorForm 
    model = ColorSet 

    def form_valid(self,form): 
     self.object = form.save(commit=False) 
     self.object.user = self.request.user 
     self.object.save() 
     return super().form_valid(form) 

class DeletePost(LoginRequiredMixin,SelectRelatedMixin,DeleteView): 
    model = models.ColorSet 
    select_related = ('user',) 
    success_url = reverse_lazy('index') 

    def get_queryset(self): 
     queryset = super().get_queryset() 
     return queryset.filter(user_id=self.request.user.id) 

    def delete(self,*args,**kwargs): 
     return super().delete(*args,**kwargs) 

adminpanelアプリforms.py :

from django import forms 
from adminpanel.models import Widget 

class WidgetForm(forms.ModelForm): 
    class Meta(): 
     model = Widget 
     fields = ('name','widget_order','body') 

     widgets = { 
      'name':forms.TextInput(attrs={'class':'text-input'}), 
      'body':forms.Textarea(attrs={'class':'text-area'}), 
     } 

colorsetsアプリのforms.py:すべてのことのコードは、この問題のために必要な、それを傷つけることができませんでした考え出したこと

from django import forms 
from colorsets.models import ColorSet 

class ColorForm(forms.ModelForm): 
    class Meta(): 
     model = ColorSet 
     fields = ('name','color_one','color_two','color_three','color_four','color_five') 

     widgets = { 
      'name':forms.TextInput(attrs={'class':'colorset-name'}), 
      'color_one':forms.TextInput(attrs={'class':'colorset-color'}), 
      'color_two':forms.TextInput(attrs={'class':'colorset-color'}), 
      'color_three':forms.TextInput(attrs={'class':'colorset-color'}), 
      'color_four':forms.TextInput(attrs={'class':'colorset-color'}), 
      'color_five':forms.TextInput(attrs={'class':'colorset-color'}), 
     } 

わかりません。

私は少し迷っています(これは過去にはうまくいきましたが)ので、どんな助けでも大歓迎です。

+0

は、 、または "widget_form"の場合、テンプレートに渡されるコンテキスト内のキーに過ぎません。たとえば、FormMixinを継承するビューでは、[get_context_data'メソッドはフォームを取得し、それを "form"としてテンプレートに渡します](https://docs.djangoproject.com/en/1.11/ref/class-based- views/mixins-editing /#django.views.generic.edit.FormMixin.get_context_data)。 –

+0

@PauloAlmeidaだから、私の場合、なぜフォームがページに表示されないのですか?フォームに移動するボタンが表示されるのはなぜですか? – Garrett

+0

クラスclassの 'class Meta:'は括弧を持つことになっていません。それ以外は間違ったことはありません。 –

答えて

1

あなたがフォームを記述する必要はありませんビューを作成し、自動的にDjangoはのModelFormを生成し使用している場合はそのようなものでなければなりません:単語「フォーム」、または「user_form」についての特別な何もない

class CreateWidgetView(LoginRequiredMixin,CreateView): 
    login_url = '/login/' 
    redirect_field_name = 'index.html' 
    model = Widget 
    fields = ['field', 'field2'] 

    def form_valid(self,form): #I Think this part is not neccesary 
     self.object = form.save(commit=False) 
     self.object.save() 
     return super().form_valid(form) 
+0

htmlでも '{{form}}'を入れてもいいですか? – Garrett

+0

はい、この例のようにhttps://docs.djangoproject.com/en/1.11/ref/class-based-views/generic-editing/#django.views.generic.edit。CreateView –

+0

そうですね、私はそれを読んだのですが、FormViewがどこから来ているのか話をしなかったのはなぜですか?FormViewがあなたにそれを設定しているからです。 – Garrett

関連する問題