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

如何处理Django CMS表单中的GET请求?,django,forms,content-management-system,django-cms,Django,Forms,Content Management System,Django Cms,我是Django CMS的新手。之前,我构建了一个简单的Django项目,其中一个HTML表单发送GET请求 用户将输入一些内容,而views.py中的代码将决定要获取或显示的页面 <form action="/search/" method="get" name="f1"> ... //user selects A, B, or C here ... </form> 现在我有了Django CMS,我对如何重新构建这个逻辑感到迷茫。我已经创建了

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

用户将输入一些内容,而
views.py中的代码将决定要获取或显示的页面

<form action="/search/" method="get" name="f1">
    ...
    //user selects A, B, or C here
    ...
</form>
现在我有了Django CMS,我对如何重新构建这个逻辑感到迷茫。我已经创建了一个显示HTML表单的页面。现在,我是否为CMS中的每个A.html、B.html和C.html创建页面?如果是这样,我应该将确定何时显示每个页面的逻辑和需要从控制器传递到模板的变量放在哪里

如果有帮助,我的
url.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
urlpatterns=patterns(“”,
url(r“^admin/”,包括(admin.site.url)),
url(r'^',包括('cms.url'),
)
如果设置为.DEBUG:
urlpatterns=模式(“”,
url(r'^media/(?P.*)$,'django.views.static.service',
{'document_root':settings.MEDIA_root,'show_index':True}),
url(r“”,包括('django.contrib.staticfiles.url'),
)+URL模式

您需要的是一个名为的功能

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

apphook的工作方式与插件类似,您需要注册它们才能让cms获取它们,因此创建一个名为
cms\u app.py
的文件,然后在该文件中创建apphook,如下所示:

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)
从django.utils.translation导入ugettext\u lazy作为_
从django.conf.url导入模式,url
从cms.app_base导入CMSApp
从cms.apphook\u池导入apphook\u池
类别ProductsApphook(CMSApp):
名称=\(“产品应用程序”)
URL=[
模式('myapp.views',
网址(
r'^$',
“产品清单”,
name=“产品清单”
),
网址(
r'^product/(?P[0-9]+)/$,
“产品详细信息视图”,
name=“产品详细信息”
),
)
]
apphook\u池寄存器(ProductsApphook)
如您所见,AppHook非常简单。它们有一个名称,然后是一个url映射,请注意,这里我在apphook定义中提供了url模式,但是如果有更多的url,那么您可以将这些url放在
url.py中,然后从apphook指向它,就像这样
url=['myapp.url']

假设我们的页面名为
products
,您可以从
/en/products
访问它,当您转到
/en/products/
时,这将触发产品列表视图,当您转到
/products/products/10
时,这将触发查看
产品详细信息视图
,使用
pk=10

一旦调用了视图,就可以轻松地重用上面的视图

用于搜索的apphook的示例

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)