如何在Django CMS表单中处理GET请求?

时间:2014-01-22 00:00:57

标签: django forms content-management-system django-cms

我是Django CMS的新手。以前,我使用HTML表单构建了一个简单的Django项目,发送GET请求。

用户会输入内容,views.py中的代码将确定要GET或显示的页面。

<form action="/search/" method="get" name="f1">
    ...
    //user selects A, B, or C here
    ...
</form>

views.py中,类似于:

def search(request):
    if A:
        variable = "A"
        return render(request, "A.html", {"Option A": variable})
    if B:
        variable = "B"
        return render(request, "B.html", {"Option B": variable})
    if C:
        variable = "C"
        return render(request, "C.html", {"Option C": variable})

现在我有了Django CMS,我迷失了如何重新构建这个逻辑。我已经创建了一个显示HTML表单的页面。现在,我是否为CMS中的每个A.html,B.html和C.html创建页面?如果是这样,我在哪里放置确定每个页面何时显示的逻辑以及需要从控制器传递到模板的变量?

如果有帮助,我的urls.py就是:

urlpatterns = patterns('',
    url(r'^admin/', include(admin.site.urls)),
    url(r'^', include('cms.urls')),
)

if settings.DEBUG:
    urlpatterns = patterns('',
    url(r'^media/(?P<path>.*)$', 'django.views.static.serve',
    {'document_root': settings.MEDIA_ROOT, 'show_indexes': True}),
    url(r'', include('django.contrib.staticfiles.urls')),
) + urlpatterns

1 个答案:

答案 0 :(得分:1)

您需要的是名为apphooks的功能。

基本上,它们允许您接管页面的呈现并提供您自己的视图,从而允许您自己呈现页面。

按照你需要注册的方式来安装插件,以便让cms接收它们,所以创建一个名为cms_app.py的文件,然后在这个文件中创建你的apphook,如下所示: / p>

from django.utils.translation import ugettext_lazy as _
from django.conf.urls import patterns, url

from cms.app_base import CMSApp
from cms.apphook_pool import apphook_pool


class ProductsApphook(CMSApp):
    name = _("Products app")
    urls = [
        patterns('myapp.views',
            url(
                r'^$',
                'product_list',
                name="product_listing"
            ),
            url(
                r'^product/(?P<pk>[0-9]+)/$',
                'product_detail_view',
                name="product_detail"
            ),
        )

    ]

apphook_pool.register(ProductsApphook)

正如您所看到的,apphooks非常简单。他们取了一个名字,然后是一个网址映射,请注意,我在这里提供了apphook定义中的url模式,但是如果有更多的网址,那么你可以在你的urls.py中放置网址,然后从你的apphook中指向它,像这样urls = ['myapp.urls']

所以说我们的网页名为products,你可以从/en/products访问它,当你转到/en/products/时,这会触发product_list视图,当你转到{{1这将使用/products/product/10触发视图product_detail_view

调用您的视图后,您就可以轻松地重复使用上面的视图。

Here's用于搜索的apphook示例。