0

craigslist に似たマーケットプレイス Web サイトを作成しようとしています。Django チュートリアル「フォームの操作」に従ってフォームを作成しましたが、POST フォームから取得した情報をレンダリングする方法がわかりません。このように、POSTで取得した情報(件名、価格など)を別のページに表示させたいです。http://bakersfield.craigslist.org/atq/3375938126.htmlそして、この商品(例:1960 フレンチチェア)の件名(form.py を見てください)を別のページにこのように表示してほしいです。http://bakersfield.craigslist.org/ata/ }

提出された情報の取り扱いについてアドバイスをいただけますか?ここに現在のコードがあります。私はあなたのすべての答えと助けに感謝します.

<-! ここに私のコードがあります -->

◆forms.py

from django import forms

class SellForm(forms.Form):
    subject = forms.CharField(max_length=100)
    price = forms.CharField(max_length=100)
    condition = forms.CharField(max_length=100)
    email = forms.EmailField()
    body = forms.TextField()

◆views.py

from django.shortcuts import render, render_to_response
from django.http import HttpResponseRedirect
from site1.forms import SellForm

def sell(request):

    if request.method =="POST":
        form =SellForm(request.POST)
        if form.is_valid():
            subject = form.cleaned_data['subject']
            price = form.cleaned_data['price']
            condition = form.cleaned_data['condition']
            email = form.cleaned_data['email']
            body = form.cleaned_data['body']

            return HttpResponseRedirect('/books/')

    else:
        form=SellForm()

    render(request, 'sell.html',{'form':form,})

◆urls.py

from django.conf.urls import patterns, include, url
from django.contrib import admin
admin.autodiscover()

urlpatterns = patterns('',
    url(r'^sechand/$','site1.views.sell'),
    url(r'^admin/', include(admin.site.urls)),

)

◆sell.html

<form action = "/sell/" method = "post">{% csrf_token%} 
{{ form.as_p }}
<input type = "submit" value="Submit" />
</form>             
4

1 に答える 1

1

db(ユーザーの「販売」を格納する場所)にモデル/テーブルがあると仮定Sellします。そうでない場合、意味がありません。ModelFormこれは、時間を節約して、単純なの代わりにを使用できることを意味しますForm。モデルフォームはデータベーステーブルを受け取り、そのhtmlフォームを生成します。

forms.py

from django.forms import ModelForm
from yourapp.models import Sell

class SellForm(ModelForm):
    class Meta:
        model = Sell

あなたのviews.pyには、他の人が見ることSellsができるようにユーザーが投稿したものを表示するもう1つのビューが必要です。また、このビューがそれぞれについてのコンテキストでレンダリングするhtmlテンプレートも必要ですSell

Sell_display.html

{% extends 'some_base_template_of_your_site.html' %}
{% block content %}
<div id="sell">
  <h3> {{ sell.subject }}</h3>
  <p> {{ sell.condition }}</p>
  <p> {{ sell.body }}</p>
  <!-- the rest of the fields.. -->
</div>
{% endblock %}

特定の情報を表示するための新しいURLエントリも必要ですSell

urls.py

from django.conf.urls import patterns, include, url
from django.contrib import admin
admin.autodiscover()

urlpatterns = patterns('',
    # Changed `sell` view to `sell_create`
    url(r'^sechand/$','site1.views.sell_create'),
    # We also add the detail displaying view of a Sell here
    url(r'^sechand/(\d+)/$','site1.views.sell_detail'),
    url(r'^admin/', include(admin.site.urls)),
)

views.py

from django.http import HttpResponseRedirect
from django.shortcuts import render_to_response, get_object_or_404
from yourapp.models import Sell
from yourapp.forms import SellForm

def sell_detail(request, pk):
    sell = get_object_or_404(Sell, pk=int(pk))
    return render_to_response('sell_display.html', {'sell':sell})

def sell_create(request):
    context = {}
    if request.method == 'POST':
        form = SellForm(request.POST)
        if form.is_valid():
            # The benefit of the ModelForm is that it knows how to create an instance of its underlying Model on your database.
            new_sell = form.save()   # ModelForm.save() return the newly created Sell.
            # We immediately redirect the user to the new Sell's display page
            return HttpResponseRedict('/sechand/%d/' % new_sell.pk)
    else:
        form = SellForm()   # On GET request, instantiate an empty form to fill in.
    context['form'] = form
    return render_to_response('sell.html', context)

これで十分だと思います。これらをよりモジュール化してより良くするためのパターンがありますが、あなたはdjangoの初心者なので、あまり多くの情報で溢れさせたくありません。

于 2012-10-31T22:45:28.040 に答える