跳转到主要内容

Wagtail CMS的投票插件

项目描述

提供投票功能的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

from django.db import models
from wagtailpolls.edit_handlers import PollChooserPanel
from wagtail.wagtailadmin.edit_handlers import FieldPanel

class Content(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管理中的投票部分添加了一些投票。您将能够从中选择一个投票,就像您预期的那样在模板中访问它。

模板 & 显示

您可以通过多种方式显示您的投票。 wagtailpolls 提供了一个模板标签来帮助您完成此操作,以及一些可以通过模板访问的属性,用于将每个问题作为表单呈现。以下是一个使用所有提供的工具的示例

{% extends "layouts/page.html" %}
{% load wagtailpolls_tags %}
{% block content %}
<h1>{{ self.title }}</h1>
<br>
{% if self.poll %}
<form class='poll' method='POST' action='{% vote self.poll %}'>
{% csrf_token %}
{{self.poll.form}}
<br><br>
    <input type="submit" value="Vote">
</form>
{% else %}
    No polls added to this page yet!
{% endif %}
{% endblock %}

如图所示,{% vote %} 模板标签需要传递一个投票实例才能正确工作。您还需要在包含此模板标签的文件顶部执行 {% 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 会话中(基本上是设置了cookie),以确保设备无法进行重复投票。如果由于这个原因拒绝投票,则投票将简单地不会注册,且在 JsonResponse 中不会返回错误。

设置

以下设置可以在您的 settings.py 文件中设置。

WAGTAILPOLLS_VOTE_COOLDOWN 这是一个表示分钟的整数,默认为 10 分钟。

WAGTAILPOLLS_VOTE_REQUIRE_PERMS 表示投票权限的字符串或字符串列表,即 'wagtailadmin.access_admin'。

项目详情


下载文件

下载您平台上的文件。如果您不确定选择哪个,请了解更多关于 安装包 的信息。

源分布

wagtailpolls-0.3.0.tar.gz (19.1 kB 查看哈希)

上传时间

由以下组织支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误日志 StatusPage StatusPage 状态页面