4

这似乎应该是显而易见的,但解决方案却让我望而却步。通常我只会编写一个简单的视图函数来填充适当的表单并将其传递给视图,但解决方案感觉如此接近..

我有一个表格。我想使用object_id我在 url 中捕获的一个实例化这个表单,然后使用参数将它发送到我的模板extra_context

我有这样的事情:

class AddProductForm(forms.Form): 
    product = forms.IntegerField()
    quantity = forms.IntegerField()

还有这个:

url(r'^products/(?P<object_id>\d+)/$', 
    'django.views.generic.list_detail.object_detail',
    {'queryset': Product.objects.all(),
    'extra_context': {'form': AddProductForm({'product': <what?>, 'quantity': 1})},
    name='product_detail'),

有没有办法<what?>用捕获的值替换上面的object_id?(也许一个聪明的 callable 传入extra_context可以为我制作表格?)

4

1 回答 1

6

恐怕你不能在你的 urlconf 中这样做。您提供的任何可调用对象都不能接受任何参数,因此您将无法获得?P<object_id>.

但是,您可以在自己的视图中重新使用通用视图来减少您必须编写的样板数量:

from django.views.generic.list_detail import object_details
from your.forms import AddProductForm
from your.models import Product

def about_pages(request, object_id=None):
    qs = Product.objects.all()
    f = AddProductForm({'product':object_id,'quantity':1})
    return object_details(request,queryset=qs,extra_context={'form':f},template='yourtemplate.html')
于 2009-12-17T01:04:15.967 回答