2

私はdjangoを使用した開発が初めてで、Openstack Horizo​​n Dashboardアプリケーション(djangoアプリケーションに基づく)を変更しようとしています。

私は 1 つの関数を実装し、今、フォームを作成しようとしていますが、リクエストに問題があります。

私のコードでは、メソッド POST を使用しています

まず、フォームにあるものを同じビューに表示したいのですが、このようにしています。

from django import http
from django.utils.translation import ugettext_lazy as _
from django.views.generic import TemplateView
from django import forms


class TesteForm(forms.Form):
    name = forms.CharField()

class IndexView(TemplateView):
    template_name = 'visualizations/validar/index.html'

    def get_context_data(request):
        if request.POST:
            form = TesteForm(request.POST)
            if form.is_valid():
                instance = form.save()
        else :
            form = TesteForm()
        return {'form':form}

class IndexView2(TemplateView):
    template_name = 'visualizations/validar/index.html'

    def get_context_data(request):
        text = None
        if request.POST:
        form = TesteForm(request.POST)
            if form.is_valid():
                text = form.cleaned_data['name']
    else:
        form = TesteForm()
        return {'text':text,'form':form}   

私のurls.pyファイルはこのようなものです

from django.conf.urls.defaults import patterns, url
from .views import IndexView
from .views import IndexView2

urlpatterns = patterns('',
    url(r'^$',IndexView.as_view(), name='index'),
    url(r'teste/',IndexView2.as_view()),
)

そして私のテンプレートはこのようなものです

{% block main %}
<form action="teste/" method="POST">{% csrf_token %}{{ form.as_p }}
<input type="submit" name="OK"/>
</form>
<p>{{ texto }}</p>
{% endblock %}

これについてdjangoのドキュメントで検索しましたが、djangoの例は明確ではなく、djangoのアプリケーションはメソッドを使用するだけで、Horizo​​n Dashboardはクラスを使用しています(上記のコードではどうですか)

これを実行すると、エラーメッセージが表示されます。

このメッセージは次のように述べています。

AttributeError at /visualizations/validar/
'IndexView' object has no attribute 'POST'
Request Method: GET
Request URL:    http://127.0.0.1:8000/visualizations/validar/
Django Version: 1.4.5
Exception Type: AttributeError
Exception Value:'IndexView' object has no attribute 'POST'
Exception Location:
 /home/labsc/Documentos/horizon/openstack_dashboard/dashboards/visualizations/validar/views.py in get_context_data, line 14
Python Executable:  /home/labsc/Documentos/horizon/.venv/bin/python  
Python Version: 2.7.3

このエラーについて検索しましたが、何も見つかりませんでした。

誰かが私を助けることができれば、私は感謝しています

4

3 に答える 3

0

デフォルトでは、TemplateView は、投稿しようとすると、許可されていないメソッド 405 を返します。独自の post メソッドを作成できます。

class IndexView(TemplateView):
    template_name = 'visualizations/validar/index.html'

    def get_context_data(request):
        #define your context and return
        context = super(ContactView, self).get_context_data(**kwargs)
        #context["testing_out"] = "this is a new context var"
        return context


    def post(self, request, *args, **kwargs):
        context = self.get_context_data()
        if context["form"].is_valid:
            print 'yes done'
            #save your model
            #redirect

    return super(TemplateView, self).render_to_response(context)

フォームから投稿する場合は、代わりに FormView を使用します。get_context_data を上書きすることで、必要に応じてコンテキストを定義できます。

django.views.generic インポート TemplateView、FormView から

フォームからのインポート ContactUsEmailForm

class ContactView(FormView):
    template_name = 'contact_us/contact_us.html'
    form_class = ContactUsEmailForm
    success_url = '.'

    def get_context_data(self, **kwargs):
        context = super(ContactView, self).get_context_data(**kwargs)
        #context["testing_out"] = "this is a new context var"
        return context

    def form_valid(self, form):
        # This method is called when valid form data has been POSTed.
        # It should return an HttpResponse.
        #form.send_email()
        #print "form is valid"
        return super(ContactView, self).form_valid(form)

contact_us = ContactView.as_view()

そして urls.py:

from django.conf.urls import patterns, url


urlpatterns = patterns('contact_us.views',
    url(r'^$', 'contact_us', name='contact_us'),
)

これが役立つことを願っています:) FormsViewの詳細。

于 2014-08-12T00:16:42.233 に答える