2012-10-31 40 views
0

我正在尝试创建类似于craigslist的市场网站。 我根据Django教程“使用表单”创建了一个表单,但我不知道如何呈现我从POST表单获得的信息。 我想让我从POST获得的信息(主题,价格等)显示在另一个页面上。 http://bakersfield.craigslist.org/atq/3375938126.html,我想要这个产品的“主题”(请看form.py)(例如1960法国主席)在另一个页面上显示。 http://bakersfield.craigslist.org/ata/}如何渲染POST并使其显示在另一页上

我可以得到一些建议来处理提交的信息吗? 这是现在的代码。我会感谢你的答案和帮助。

< - !这里是我的代码 - >

◆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>    

回答

2

我假设你的数据库中有一个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一个多视图。你还需要一个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 %} 

我们还需要为特定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的显示一个新的URL条目

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初学者。

+0

非常感谢!现在我被重定向到“页面未找到(404)(我重定向的URL是”Http ~~/sell /“,因为我有”

“里面当我点击POST表单上的“提交”按钮时,我会点击“sell.html”页面。根据你的解释,我应该重定向到新的Sell的显示页面。我应该改变sell.html中的某些内容吗? – stack5914

+0

对于上面的urlspattenrs,表单操作应该是“/ sechand /”。根据你喜欢的任何东西进行调整。 – rantanplan

+0

感谢这么多,我已经成功地创建了注册/登录/注销/资料/页,并感谢您的信息,在“卖出”页面(这些发布产品的信息被存储,如“/ sechand/1 /,/ sechand/2/...“)!此外,我创建了“产品”页面,其中包含一些类别(书籍,家具等,但现在我仅仅关注“电子产品”),以显示“SellForm(ModelForm)”创建的产品信息页面。但是,我无法弄清楚如何将张贴的数据从表单链接到“electronics.html”页面。如果你有空闲时间,请检查这个问题。 (http://bit.ly/TA7Vl2) – stack5914

相关问题