wagtail cms的轮询插件
wagtailpolls的Python项目详细描述
提供轮询功能的wagtail插件。
安装
使用pip安装:
pip install wagtailpolls
它适用于Wagtail 1.3及以上。
使用
将wagtailpolls添加到INSTALLED_APPS中。
确保将from wagtailpolls.views.vote import vote行添加到urls.py中,并包含url url(r'^vote/(?P<poll_pk>.*)/$', vote, name='wagtailpolls_vote')。
定义一个引用wagtailpolls.Poll的外键,并使用PollChooserPanel:
fromdjango.dbimportmodelsfromwagtailpolls.edit_handlersimportPollChooserPanelfromwagtail.wagtailadmin.edit_handlersimportFieldPanelclassContent(Page):body=models.TextField()poll=models.ForeignKey('wagtailpolls.Poll',null=True,blank=True,on_delete=models.SET_NULL)content_panels=[FieldPanel('body',classname="full"),PollChooserPanel('poll'),]
然后,在编辑器中,确保在wagtail管理的polls部分添加了一些polls。您将能够从模板中选择一个可以访问的投票,正如您所期望的那样。
模板显示
您可以通过多种方式显示投票。wagtailpolls附带了一个模板标记来帮助实现这一点,以及通过模板化来将每个问题呈现为表单的某些属性。下面是使用提供的所有工具的示例:
{% extends "layouts/page.html" %} {% load wagtailpolls_tags %} {% block content %} <h1>{{ self.title }}</h1><br> {% if self.poll %} <formclass='poll'method='POST'action='{% vote self.poll %}'> {% csrf_token %} {{self.poll.form}} <br><br><inputtype="submit"value="Vote"></form> {% else %} No polls added to this page yet! {% endif %} {% endblock %}
如图所示,{% vote %}template标记需要传递一个poll实例才能正常工作。您还需要在使用此模板标记的文件顶部{% load wagtailpolls_tags %}。 投票可以在最后使用.form呈现所有问题。.form_as_ul和所有其他表单类型也将工作。
如果您确实为页面选择了投票,则表单上将不会显示任何字段,并且在投票时,将显示一条消息,说明没有要投票的投票。
投票
提交投票后,服务器将返回JsonResponse,如:
{"total_votes":11,"total_questions":3,"poll":"Test Poll","votes":{"Nah":10,"Yeah":1,"Maybe":0}}
使用javascript,可以根据自己的喜好使用这些数据创建投票的前端。
投票表也会进行一些验证。如果投票表无法获得您的IP,它将返回如下内容:
{"poll":"Test Poll","total_questions":3,"total_votes":11,"votes":{"Yeah":1,"Maybe":0,"Nah":10},"form_error":{"__all__":["Sorry, we were not able to obtain your ip address"]}}
还有一个WAGTAILPOLLS_VOTE_COOLDOWN是在您的设置中设置的。这将只允许同一IP上的用户在您选择的时间间隔内进行投票。如果捕捉到这个错误,则该错误将出现在JsonResponse中,与上面的错误非常相似。
此外,信息将被添加到django会话中(基本上将设置cookies),这将有助于确保设备不能投票两次。如果由于这个原因投票被拒绝,投票就不会注册,不会在JsonResponse中返回任何错误。
设置
可以在settings.py文件中设置以下设置。
WAGTAILPOLLS_VOTE_COOLDOWN这是一个表示分钟的整数,默认为10分钟。
WAGTAILPOLLS_VOTE_REQUIRE_PERMS代表投票权的字符串或字符串列表。'wagtailadmin.access\u admin'