在我的 Django 模板中,如何显示复选框和通知类型?

发布于 2024-10-11 03:48:46 字数 2278 浏览 3 评论 0原文

如果这是 Django_notification (https://github.com/pinax/django-notification/blob/master/notification/views.py) 中的视图,如何显示该复选框?这里似乎没有表单对象。通常,我习惯这样做:{{ myform.thefield }}

@login_required
def notice_settings(request):
    """
    The notice settings view.

    Template: :template:`notification/notice_settings.html`

    Context:

        notice_types
            A list of all :model:`notification.NoticeType` objects.

        notice_settings
            A dictionary containing ``column_headers`` for each ``NOTICE_MEDIA``
            and ``rows`` containing a list of dictionaries: ``notice_type``, a
            :model:`notification.NoticeType` object and ``cells``, a list of
            tuples whose first value is suitable for use in forms and the second
            value is ``True`` or ``False`` depending on a ``request.POST``
            variable called ``form_label``, whose valid value is ``on``.
    """
    notice_types = NoticeType.objects.all()
    settings_table = []
    for notice_type in notice_types:
        settings_row = []
        for medium_id, medium_display in NOTICE_MEDIA:
            form_label = "%s_%s" % (notice_type.label, medium_id)
            setting = get_notification_setting(request.user, notice_type, medium_id)
            if request.method == "POST":
                if request.POST.get(form_label) == "on":
                    if not setting.send:
                        setting.send = True
                        setting.save()
                else:
                    if setting.send:
                        setting.send = False
                        setting.save()
            settings_row.append((form_label, setting.send))
        settings_table.append({"notice_type": notice_type, "cells": settings_row})

    if request.method == "POST":
        next_page = request.POST.get("next_page", ".")
        return HttpResponseRedirect(next_page)

    notice_settings = {
        "column_headers": [medium_display for medium_id, medium_display in NOTICE_MEDIA],
        "rows": settings_table,
    }

    return render_to_response("notification/notice_settings.html", {
        "notice_types": notice_types,
        "notice_settings": notice_settings,
    }, context_instance=RequestContext(request))

If this is the view in Django_notification (https://github.com/pinax/django-notification/blob/master/notification/views.py), how do I display the check box? It doesn't seem like there are form objects here. Usually, I'm used to doing this: {{ myform.thefield }}

@login_required
def notice_settings(request):
    """
    The notice settings view.

    Template: :template:`notification/notice_settings.html`

    Context:

        notice_types
            A list of all :model:`notification.NoticeType` objects.

        notice_settings
            A dictionary containing ``column_headers`` for each ``NOTICE_MEDIA``
            and ``rows`` containing a list of dictionaries: ``notice_type``, a
            :model:`notification.NoticeType` object and ``cells``, a list of
            tuples whose first value is suitable for use in forms and the second
            value is ``True`` or ``False`` depending on a ``request.POST``
            variable called ``form_label``, whose valid value is ``on``.
    """
    notice_types = NoticeType.objects.all()
    settings_table = []
    for notice_type in notice_types:
        settings_row = []
        for medium_id, medium_display in NOTICE_MEDIA:
            form_label = "%s_%s" % (notice_type.label, medium_id)
            setting = get_notification_setting(request.user, notice_type, medium_id)
            if request.method == "POST":
                if request.POST.get(form_label) == "on":
                    if not setting.send:
                        setting.send = True
                        setting.save()
                else:
                    if setting.send:
                        setting.send = False
                        setting.save()
            settings_row.append((form_label, setting.send))
        settings_table.append({"notice_type": notice_type, "cells": settings_row})

    if request.method == "POST":
        next_page = request.POST.get("next_page", ".")
        return HttpResponseRedirect(next_page)

    notice_settings = {
        "column_headers": [medium_display for medium_id, medium_display in NOTICE_MEDIA],
        "rows": settings_table,
    }

    return render_to_response("notification/notice_settings.html", {
        "notice_types": notice_types,
        "notice_settings": notice_settings,
    }, context_instance=RequestContext(request))

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

走野 2024-10-18 03:48:46

此视图的默认模板已签入 github: https://github.com/pinax/pinax/blob/master/pinax/templates/default/notification/notice_settings.html

更新:Pinax 删除了他们的主题,仍然可以找到上次使用模板签入的此处

没有为通知设置对象定义表单,因此复选框元素(以及表单本身)是使用原始 HTML 创建的:

    <form method="POST" action=""> {# doubt this easy to do in uni-form #}
        {% csrf_token %}
        <table class="notice_settings">
            <tr>
                <th>{% trans "Notification Type" %}</th>
                {% for header in notice_settings.column_headers %}
                    <th>{{ header }}</th>
                {% endfor %}
            </tr>
            {% for row in notice_settings.rows %}
                <tr>
                    <td>{% trans row.notice_type.display %}<br/>
                        <span class="notice_type_description">{% trans row.notice_type.description %}</span>
                    </td>
                    {% for cell in row.cells %}
                        <td>
                            <input type="checkbox" name="{{ cell.0 }}" {% if cell.1 %}checked="yes"{% endif %}/>
                        </td>
                    {% endfor %}
                </tr>
            {% endfor %}
            <tr>
                <td><input type="submit" value="{% trans "Change" %}" /></td>
            </tr>
        </table>
    </form>

The default template for this view is checked into github: https://github.com/pinax/pinax/blob/master/pinax/templates/default/notification/notice_settings.html

UPDATE: Pinax removed their themes, the last checkin with templates can still be found here.

There is no form defined for the notification settings object, so the checkbox elements (and the form itself) are created using raw HTML:

    <form method="POST" action=""> {# doubt this easy to do in uni-form #}
        {% csrf_token %}
        <table class="notice_settings">
            <tr>
                <th>{% trans "Notification Type" %}</th>
                {% for header in notice_settings.column_headers %}
                    <th>{{ header }}</th>
                {% endfor %}
            </tr>
            {% for row in notice_settings.rows %}
                <tr>
                    <td>{% trans row.notice_type.display %}<br/>
                        <span class="notice_type_description">{% trans row.notice_type.description %}</span>
                    </td>
                    {% for cell in row.cells %}
                        <td>
                            <input type="checkbox" name="{{ cell.0 }}" {% if cell.1 %}checked="yes"{% endif %}/>
                        </td>
                    {% endfor %}
                </tr>
            {% endfor %}
            <tr>
                <td><input type="submit" value="{% trans "Change" %}" /></td>
            </tr>
        </table>
    </form>
黎歌 2024-10-18 03:48:46

您显示的视图仅管理 POSTed 通知的处理,而不管理页面中表单的显示。您可以创建自己的表单,其中包含一个名为 form_label 的字段,并将其包含在发布到此视图的任何页面中(可能是隐藏输入)。

The view you show only manages the processing of the POSTed notification but not the displaying of a form in a page. You can create your own form that includes a field called form_label and include it in whatever page that posts to this view (could be a hidden input).

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文