开发者

In my Django template, how do I display the check boxes and notification types?

开发者 https://www.devze.com 2023-02-03 08:58 出处:网络
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 object

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开发者_如何学Go 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))


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>


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).

0

精彩评论

暂无评论...
验证码 换一张
取 消