【发布时间】:2015-04-21 04:13:52
【问题描述】:
如果用户填写表格,我编写了一个简单的 django 应用程序来存储电子邮件地址。一切正常,但是当我按照tutorial 将我的应用程序集成到 django-cms 中时,我注意到我的表单没有像我将它移到 django-cms 之前那样显示在插件中。 {% csrf_token %} 和 {{ form.as_p }} 似乎在插件中不起作用。
有谁知道为什么?
这里是我的 cms_plugin.py
from cms.plugin_base import CMSPluginBase
from cms.plugin_pool import plugin_pool
from newsletter_djangocms.models import NewsletterPlugin
from django.utils.translation import ugettext as _
class CMSNewsletterPlugin(CMSPluginBase):
model = NewsletterPlugin
module = _("Recipients")
name = _("Newsletter Plugin")
render_template = "newsletter_djangocms/add.html"
def render(self, context, instance, placeholder):
context.update({'instance': instance})
return context
plugin_pool.register_plugin(CMSNewsletterPlugin)
主应用的models.py(不是CMSPlugin)
from django.db import models
class Recipient(models.Model):
adress = models.EmailField(max_length=100)
name = models.CharField(max_length=100)
lastname = models.CharField(max_length=100)
def __str__(self):
return self.adress
和 forms.py(也是主应用程序)
from django import forms
from .models import Recipient
class NewsletterForm(forms.ModelForm):
class Meta:
model = Recipient
fields = ('adress','name', 'lastname',)
哪个文件可能是错误的,或者我在哪里可以找到有用的帖子或其他东西。我在这里找到的唯一东西是this。但这对我不起作用。我会很高兴有一个好的小费。
【问题讨论】:
-
你有没有机会描述一下当你展示你的插件时会发生什么?另外,还有一些其他问题,您是否创建了任何有效的插件?哪个版本的 Python/Django/django CMS?你能分享你的模板标记吗?在处理表单时会绊倒新 CMSPlugin 用户的一件事是,您需要了解插件中的表单通常无法 POST 到自身,因为它没有唯一的 URL,并且单个插件可能会出现很多次同一页面,因此,通常发布很复杂。但是,使用 AJAX 发布的效果很好,正如 @m15hbah 在下面发布的链接中所指出的那样。
-
好吧 {% csrf_token %}{{ form.as_p }} 我的表单不只显示提交按钮。是的,我之前带来了 2 个其他应用程序与 django-cms 一起使用,但是表单没有问题,因为它们只是在 django-admin 中。现在我需要它们可供我网站的访问者使用。我使用了 django 1.7、python2.7 和 django-cms 3.0。 Atm 我正在关注 m15hbah 的链接,但需要一点。谢谢回答
-
Lepus:你有没有发现,如何让模板中的表单
{{ form.as_p }}正确呈现?我猜渲染上下文需要为此提供一些信息。 mishbah 的答案相当指向 djangocms-forms。正如我希望理解的那样,它不是为第三方应用程序编写插件。
标签: django django-forms django-templates django-cms