Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用Django获取要在HTML中显示的表单_Python_Django_Forms - Fatal编程技术网

Python 使用Django获取要在HTML中显示的表单

Python 使用Django获取要在HTML中显示的表单,python,django,forms,Python,Django,Forms,所以我以前已经正确地显示了表单,我只是有点不明白为什么我在这样做的时候会使用某些单词,我想知道为什么我会使用不同的单词来显示不同的表单 {% extends "base.html" %} {% block content %} <div class="form-base"> {% if registered %} <h1>Thank you for registering!</h1> {% else %} &

所以我以前已经正确地显示了表单,我只是有点不明白为什么我在这样做的时候会使用某些单词,我想知道为什么我会使用不同的单词来显示不同的表单

{% 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 %}
在第一个示例(colorist_form.html)中,我使用的是
{{form}
,它确实可以显示表单

{% 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 %}
同样在我的register.html中,我正在使用
{{user\u form}}
来显示表单

{% 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 %}
colorsets app 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)
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'}),
        }
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'}),
        }
colorsets app 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'}),
        }
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'}),
        }
不确定这个问题是否需要所有这些代码,但我认为这不会有什么坏处


我有点不知所措(尽管我以前已经让它工作过),因此非常感谢您的帮助。

如果您使用“创建视图”,则不必编写表单,自动Django生成模型表单,因此应该如下所示:

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) 

单词“form”、“user\u form”或“widget\u form”没有什么特别之处,它们只是传递给模板的上下文中的键。例如,在继承FormMixin的视图中,@PauloAlmeida在我的例子中,为什么表单没有显示在页面上?为什么它只显示一个指向表单的按钮?
class Meta:
表单中的类不应该有paren。除此之外,我没有发现任何错误。@PauloAlmeida这没有影响任何事情,但谢谢你。相关的models.py和url.py可能对诊断问题也很有用。也许从帖子中删除所有不相关的东西,这只会增加噪音。一个URL.py、views.py、forms.py、models.py和template的链,只针对不起作用的表单,将有助于解决这个问题。虽然在html中,我只是将
{{form}}
?是的,就像在这个例子中一样,是的,我读到了,但我不明白为什么他们不谈论“form”这个词来自哪里,但那是因为FormView是为您设置的?不,一个不同于另一个,CreateView在模板小部件_form.html中创建表单作为表单。单词form是默认名称